From c69e68c5e9d8239f710f289380eda7b079616fd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A3=A0=E6=B8=9A=E5=90=AC=E6=BD=AE?= Date: Tue, 24 Feb 2026 11:33:18 +0900 Subject: [PATCH 1/3] Migrated to NeoForge 1.21.1, cleaned up some old stuff, and grabbed a coffee --- .github/workflows/ci.yml | 52 ------------ .gitignore | Bin 327 -> 339 bytes README.md | 10 +-- THIRD_PARTY_NOTICES.md | 13 ++- forge-port-api/build.gradle | 39 +++++---- forge-port-api/gradle.properties | 12 +-- forge-port-api/settings.gradle | 4 +- .../reiparticlesapi/ReiParticlesAPI.java | 26 ------ .../reiparticlesapi/ReiParticlesAPIForge.java | 75 +++++++---------- .../annotations/codec/CodecHelper.java | 10 +-- .../client/CameraShakeClientState.java | 14 ++-- .../reiparticlesapi/config/APIConfig.java | 24 +++--- .../event/ForgeEventForwarder.java | 52 ++++++------ .../network/ReiParticlesNetwork.java | 49 +++++------ .../buffer/BooleanControllerBuffer.java | 2 +- .../network/buffer/CharControllerBuffer.java | 2 +- .../buffer/DoubleControllerBuffer.java | 2 +- .../network/buffer/EmptyControllerBuffer.java | 2 +- .../network/buffer/FloatControllerBuffer.java | 2 +- .../buffer/IntArrayControllerBuffer.java | 2 +- .../network/buffer/IntControllerBuffer.java | 2 +- .../buffer/LongArrayControllerBuffer.java | 2 +- .../network/buffer/LongControllerBuffer.java | 2 +- .../buffer/NestedBuffersControllerBuffer.java | 4 +- .../buffer/ParticleControllerDataBuffer.java | 2 +- .../RelativeLocationControllerBuffer.java | 2 +- .../network/buffer/ShortControllerBuffer.java | 2 +- .../buffer/StringControllerBuffer.java | 2 +- .../network/buffer/UUIDControllerBuffer.java | 2 +- .../network/buffer/Vec3dControllerBuffer.java | 2 +- .../network/packet/CameraShakeS2CPacket.java | 25 +++--- .../network/packet/PacketCameraShakeS2C.java | 27 +++--- .../packet/PacketDisplayEntityS2C.java | 25 +++--- .../network/packet/PacketKeyActionC2S.java | 22 +++-- .../packet/PacketParticleCompositionS2C.java | 23 ++++-- .../packet/PacketParticleEmittersS2C.java | 24 +++--- .../packet/PacketParticleGroupS2C.java | 27 +++--- .../network/packet/PacketParticleS2C.java | 48 ++++++----- .../packet/PacketParticleStyleS2C.java | 27 +++--- .../network/packet/PacketRenderEntityS2C.java | 22 +++-- .../ClientDisplayEntityPacketHandler.java | 2 +- .../ClientParticleEmittersPacketHandler.java | 2 +- .../ClientParticleGroupPacketHandler.java | 2 +- .../listener/ClientParticlePacketHandler.java | 2 +- .../ClientParticleStylePacketHandler.java | 2 +- .../network/particle/ServerParticleGroup.java | 2 +- .../particle/ServerParticleGroupManager.java | 47 +++++++---- .../emitters/DebugParticleEmitters.java | 2 +- .../emitters/DebugRailgunEmitters.java | 2 +- .../particle/emitters/ParticleEmitters.java | 2 +- .../impl/DefendClassParticleEmitters.java | 2 +- .../impl/ExampleClassParticleEmitters.java | 2 +- .../impl/ExplodeClassParticleEmitters.java | 2 +- .../impl/FireClassParticleEmitters.java | 2 +- .../impl/LightningClassParticleEmitters.java | 2 +- .../impl/PhysicsParticleEmitters.java | 2 +- .../emitters/impl/PresetLaserEmitters.java | 2 +- .../emitters/impl/PresetTestEmitters.java | 2 +- .../emitters/impl/SimpleParticleEmitters.java | 2 +- .../particle/style/ParticleStyleManager.java | 24 ++++-- .../particles/ControllableParticle.java | 9 +- .../particles/ReiModParticles.java | 62 +++++++------- .../particles/ReiParticleTextureSheet.java | 15 +--- .../impl/ControllableCloudEffect.java | 6 -- .../impl/ControllableEnchantmentEffect.java | 6 -- .../impl/ControllableEndRodEffect.java | 6 -- .../impl/ControllableFallingDustEffect.java | 5 -- .../impl/ControllableFireworkEffect.java | 6 -- .../impl/ControllableFlashEffect.java | 6 -- .../impl/ControllableSplashEffect.java | 6 -- .../utils/GraphMathHelper.java | 2 +- .../reiparticlesapi/utils/Math3DUtil.java | 17 ++-- .../reiparticlesapi/utils/MathPresets.java | 37 +++++---- .../reiparticlesapi/utils/PhysicsUtil.java | 4 +- .../utils/ServerCameraUtil.java | 10 --- .../utils/math/ExpressionEvaluator.java | 4 +- .../reiparticlesapi/utils/storage/Memo.java | 12 ++- .../{mods.toml => neoforge.mods.toml} | 10 +-- .../ReiParticlesAPISchedulerTest.java | 17 ++-- forge-port/build.gradle | 78 ++++++------------ forge-port/gradle.properties | 12 +-- forge-port/settings.gradle | 4 +- .../ReiParticleSkillForge.java | 33 ++++---- .../client/EndCrystalBeamSuppressor.java | 53 ++++-------- .../client/SkillClientRegistries.java | 14 ++-- .../client/SkillKeyInputHandler.java | 15 ++-- .../client/SkillKeyMappings.java | 9 +- .../config/SkillClientConfig.java | 12 +-- .../ReiParticleSkillDataGenerators.java | 7 +- .../datagen/SkillLanguageProvider.java | 2 +- .../impl/formation/HugeSwordFormation.java | 2 +- .../enchantments/SkillEnchantments.java | 47 ++++++++--- .../enchantments/SwordLightEnchantment.java | 35 -------- .../emitter/client/ClientCenterEmitter.java | 2 +- .../client/ClientCloudRingEmitter.java | 2 +- .../emitter/client/ClientDustEmitter.java | 2 +- .../client/ClientEnchantRingEmitter.java | 2 +- .../entities/BarrageItemEntity.java | 18 ++-- .../entities/SkillEntityTypes.java | 12 +-- .../reiparticleskill/keys/SkillKeys.java | 2 +- .../listener/KeyListener.java | 7 +- .../mixin/EndCrystalRendererMixin.java | 16 ++-- .../emitters/p1/CollectEnderPowerEmitter.java | 2 +- .../emitters/p1/CollectPillarsEmitters.java | 2 +- .../emitters/p1/EndBeamExplosionEmitter.java | 2 +- .../core/emitters/p1/EndCrystalEmitters.java | 2 +- .../core/emitters/p1/EndLightBeamEmitter.java | 2 +- .../emitters/p1/SummonExplosionEmitter.java | 2 +- .../core/emitters/p2/LightEmitter.java | 2 +- .../core/emitters/p2/SwordAuraEmitters.java | 2 +- .../emitters/p2/SwordExplosionEmitters.java | 2 +- .../p2/formation/SwordFormationEmitters.java | 2 +- .../SwordFormationExplosionEmitter.java | 2 +- .../formation/SwordFormationWaveEmitter.java | 2 +- .../display/emitter/ParticleGroupEmitter.java | 2 +- .../display/emitter/RailgunBeamEmitter.java | 2 +- .../emitter/RailgunExplosionEmitter.java | 2 +- .../display/LargeMagicCircleStyle.java | 2 +- .../preview/display/RailgunBeamStyle.java | 2 +- .../display/RailgunChargingRingStyle.java | 2 +- .../preview/styles/EndCrystalStyle.java | 2 +- .../preview/styles/EndDustStyle.java | 2 +- .../styles/EnderRespawnCenterStyle.java | 2 +- .../styles/EnderRespawnWaveCloudStyle.java | 2 +- .../styles/EnderRespawnWaveEnchantStyle.java | 2 +- .../sounds/SkillSoundEvents.java | 14 ++-- .../util/DragonRespawnStateUtil.java | 2 +- .../util/SwordLightEnchantUtil.java | 2 +- .../{mods.toml => neoforge.mods.toml} | 13 ++- .../enchantment/sword_light.json | 21 +++++ .../resources/reiparticleskill.mixins.json | 7 +- 131 files changed, 693 insertions(+), 829 deletions(-) delete mode 100644 .github/workflows/ci.yml rename forge-port-api/src/main/resources/META-INF/{mods.toml => neoforge.mods.toml} (79%) delete mode 100644 forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SwordLightEnchantment.java rename forge-port/src/main/resources/META-INF/{mods.toml => neoforge.mods.toml} (80%) create mode 100644 forge-port/src/main/resources/data/reiparticleskill/enchantment/sword_light.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 3e0b8b2..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: CI - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - build-api: - name: Build ReiParticlesAPI - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: 17 - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v3 - - name: Build API module - working-directory: forge-port-api - run: ./gradlew build - - name: Upload API jar - uses: actions/upload-artifact@v4 - with: - name: reiparticlesapi-jar - path: forge-port-api/build/libs/*.jar - - build-mod: - name: Build ReiParticleSkill - needs: build-api - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: 17 - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v3 - - name: Build API dependency first - working-directory: forge-port-api - run: ./gradlew build -x test - - name: Build & test main mod - working-directory: forge-port - run: ./gradlew build - - name: Upload mod jar - uses: actions/upload-artifact@v4 - with: - name: reiparticleskill-jar - path: forge-port/build/libs/*.jar diff --git a/.gitignore b/.gitignore index 43bad796aa0b7b2f04560d59c03ed727235a0c83..5f6ebcd846dac29299d99b205c9f49e48d58be4a 100644 GIT binary patch delta 20 bcmX@kbeU;`J0njXLn=cFgFXW<0~Z4TJgo#U delta 7 Ocmcc2bew5}J0k!LVgi={ diff --git a/README.md b/README.md index 6020034..f807a23 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# ReiParticleSkill Forge (1.20.1) +# ReiParticleSkill NeoForge (1.21.1) [![License: LGPL-3.0-only](https://img.shields.io/badge/License-LGPL--3.0--only-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) -A Minecraft Forge 1.20.1 particle effects mod featuring custom Ender Dragon respawn animations and visual effects. +A Minecraft NeoForge 1.21.1 particle effects mod featuring custom Ender Dragon respawn animations and visual effects. ## Modules @@ -15,9 +15,9 @@ Both jars must be placed in the `mods/` folder. ## Requirements -- Minecraft 1.20.1 -- Forge 47.2.0 -- Java 17 +- Minecraft 1.21.1 +- NeoForge 21.1.173 +- Java 21 ## Building diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index d39d868..c2f959d 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -37,15 +37,14 @@ SOFTWARE. --- -## Minecraft Forge +## NeoForge -- **Artifact:** `net.minecraftforge:forge:1.20.1-47.2.0` -- **License:** LGPL-2.1-only (Forge), Minecraft EULA (Mojang) -- **Homepage:** https://minecraftforge.net -- **Note:** Forge is a modding platform; it is not bundled in the output jars. +- **Artifact:** `net.neoforged:neoforge:21.1.173` +- **License:** LGPL-2.1-only (NeoForge), Minecraft EULA (Mojang) +- **Homepage:** https://neoforged.net +- **Note:** NeoForge is a modding platform; it is not bundled in the output jars. Minecraft is proprietary software owned by Mojang Studios / Microsoft. - Forge's license has varied across versions; LGPL-2.1 is a simplified - description for the 1.20.x era. See Forge's own LICENSE for authoritative terms. + See NeoForge's own LICENSE for authoritative terms. --- diff --git a/forge-port-api/build.gradle b/forge-port-api/build.gradle index c0f6ff4..d647425 100644 --- a/forge-port-api/build.gradle +++ b/forge-port-api/build.gradle @@ -2,7 +2,7 @@ plugins { id 'eclipse' id 'idea' id 'maven-publish' - id 'net.minecraftforge.gradle' version '[6.0.36,6.2)' + id 'net.neoforged.moddev' version '2.0.140' } version = mod_version @@ -11,37 +11,35 @@ group = mod_group_id base { archivesName = mod_id } java { - toolchain { languageVersion = JavaLanguageVersion.of(17) } + toolchain { languageVersion = JavaLanguageVersion.of(21) } } -minecraft { - mappings channel: 'official', version: minecraft_version - copyIdeResources = true +neoForge { + version = neo_version runs { - configureEach { - workingDirectory project.file('run') - property 'forge.logging.markers', 'REGISTRIES' - property 'forge.logging.console.level', 'debug' - mods { - "${mod_id}" { - source sourceSets.main - } - } + client { + client() + } + server { + server() + programArgument '--nogui' + } + } + + mods { + "${mod_id}" { + sourceSet(sourceSets.main) } - client {} - server { args '--nogui' } } } repositories { - maven { url = 'https://maven.minecraftforge.net' } + maven { url = 'https://maven.neoforged.net/releases' } mavenCentral() } dependencies { - minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" - // ClassGraph — runtime classpath scanning (used by ReiAPIScanner) implementation 'io.github.classgraph:classgraph:4.8.174' @@ -59,11 +57,12 @@ processResources { mod_name : mod_name, mod_license : mod_license, mod_version : mod_version, + neo_version_range : neo_version_range, loader_version_range : loader_version_range, minecraft_version_range: minecraft_version_range ] inputs.properties replaceProperties - filesMatching(['META-INF/mods.toml']) { + filesMatching(['META-INF/neoforge.mods.toml']) { expand replaceProperties } } diff --git a/forge-port-api/gradle.properties b/forge-port-api/gradle.properties index 647a785..f5c393a 100644 --- a/forge-port-api/gradle.properties +++ b/forge-port-api/gradle.properties @@ -1,3 +1,4 @@ +org.gradle.java.home=C:\\Program Files\\Microsoft\\jdk-21.0.10.7-hotspot org.gradle.jvmargs=-Xmx2G org.gradle.daemon=true org.gradle.parallel=true @@ -5,13 +6,14 @@ org.gradle.parallel=true mod_id=reiparticlesapi mod_name=ReiParticlesAPI mod_license=LGPL-3.0-only -mod_version=1.0-SNAPSHOT-forge-port +mod_version=1.0-SNAPSHOT-neoforge mod_group_id=com.reiasu.reiparticlesapi -minecraft_version=1.20.1 -forge_version=47.2.0 -loader_version_range=[47,) -minecraft_version_range=[1.20.1,1.21) +minecraft_version=1.21.1 +neo_version=21.1.173 +neo_version_range=[21.1,) +loader_version_range=[4,) +minecraft_version_range=[1.21.1,1.22) org.gradle.java.installations.auto-download=true org.gradle.java.installations.auto-detect=true diff --git a/forge-port-api/settings.gradle b/forge-port-api/settings.gradle index 5d99451..950bb18 100644 --- a/forge-port-api/settings.gradle +++ b/forge-port-api/settings.gradle @@ -1,7 +1,7 @@ pluginManagement { repositories { gradlePluginPortal() - maven { url = 'https://maven.minecraftforge.net' } + maven { url = 'https://maven.neoforged.net/releases' } mavenCentral() } } @@ -10,4 +10,4 @@ plugins { id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' } -rootProject.name = 'reiparticlesapi-forge-port' +rootProject.name = 'reiparticlesapi-neoforge' diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java index 9799871..b34a32a 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java @@ -36,9 +36,6 @@ */ public final class ReiParticlesAPI { public static final ReiParticlesAPI INSTANCE = new ReiParticlesAPI(); - /** @deprecated Use {@link #reiScheduler()} for new code. This scheduler only supports one-shot server tasks. */ - @Deprecated - public static final Scheduler scheduler = new Scheduler(); private static final Logger LOGGER = LogUtils.getLogger(); private static boolean initialized; private static boolean scannersLoaded; @@ -142,29 +139,6 @@ public static ReiScheduler reiScheduler() { return ReiScheduler.INSTANCE; } - /** - * Legacy scheduler stub that delegates all calls to {@link ReiScheduler}. - * - * @deprecated Use {@link #reiScheduler()} instead. This class is a thin delegate - * and will be removed in a future version. - */ - @Deprecated - public static final class Scheduler { - - /** Delegates to {@link ReiScheduler#runTask(int, Runnable)}. */ - public void runTask(int ticks, Runnable task) { - ReiScheduler.INSTANCE.runTask(Math.max(1, ticks), task); - } - - /** No-op — {@link ReiScheduler} is ticked by the API tick handler. */ - public void tick() { - } - - /** No-op — lifecycle managed by {@link ReiScheduler}. */ - public void shutdown() { - } - } - private static SimpleTestGroupBuilder buildSmokeTestGroup(ServerPlayer user) { return new SimpleTestGroupBuilder("api-test-group-builder", user); } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java index 473aa55..545e333 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java @@ -28,17 +28,18 @@ import com.reiasu.reiparticlesapi.test.TestManager; import com.reiasu.reiparticlesapi.utils.ClientCameraUtil; import com.mojang.logging.LogUtils; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RegisterParticleProvidersEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.RegisterCommandsEvent; +import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.neoforge.event.tick.ServerTickEvent; import org.slf4j.Logger; import java.util.Map; @@ -48,58 +49,47 @@ public final class ReiParticlesAPIForge { public static final String MOD_ID = "reiparticlesapi"; private static final Logger LOGGER = LogUtils.getLogger(); - public ReiParticlesAPIForge() { - registerConfig(); - registerTickCallbacks(); + public ReiParticlesAPIForge(IEventBus modBus, ModContainer container) { + registerConfig(container); + registerTickCallbacks(modBus); registerCommands(); - initSystems(); + initSystems(modBus); - LOGGER.info("ReiParticlesAPI Forge runtime initialized"); + LOGGER.info("ReiParticlesAPI NeoForge runtime initialized"); } // ---- Lifecycle phases ---- - private void registerConfig() { - ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, APIConfig.SPEC); + private void registerConfig(ModContainer container) { + container.registerConfig(ModConfig.Type.COMMON, APIConfig.SPEC); } - private void registerTickCallbacks() { - var modBus = FMLJavaModLoadingContext.get().getModEventBus(); + private void registerTickCallbacks(IEventBus modBus) { modBus.addListener((FMLClientSetupEvent event) -> onClientSetup()); ReiModParticles.register(modBus); modBus.addListener(this::onRegisterParticleProviders); - MinecraftForge.EVENT_BUS.addListener((TickEvent.ClientTickEvent event) -> { - if (event.phase == TickEvent.Phase.START) { - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClientTickEventForwarder::onClientStartTick); - } - }); - MinecraftForge.EVENT_BUS.addListener((TickEvent.ClientTickEvent event) -> { - if (event.phase == TickEvent.Phase.END) { - onClientEndTick(); - } - }); - MinecraftForge.EVENT_BUS.addListener((TickEvent.ServerTickEvent event) -> { - if (event.phase == TickEvent.Phase.START && event.getServer() != null) { - ReiEventBus.call(new ServerPreTickEvent(event.getServer())); - } - }); - MinecraftForge.EVENT_BUS.addListener((TickEvent.ServerTickEvent event) -> { - if (event.phase == TickEvent.Phase.END && event.getServer() != null) { - onServerEndTick(event.getServer()); + NeoForge.EVENT_BUS.addListener((ClientTickEvent.Pre event) -> { + if (FMLEnvironment.dist == Dist.CLIENT) { + ClientTickEventForwarder.onClientStartTick(); } }); + NeoForge.EVENT_BUS.addListener((ClientTickEvent.Post event) -> onClientEndTick()); + NeoForge.EVENT_BUS.addListener((ServerTickEvent.Pre event) -> + ReiEventBus.call(new ServerPreTickEvent(event.getServer()))); + NeoForge.EVENT_BUS.addListener((ServerTickEvent.Post event) -> + onServerEndTick(event.getServer())); } private void registerCommands() { - MinecraftForge.EVENT_BUS.addListener( + NeoForge.EVENT_BUS.addListener( (RegisterCommandsEvent event) -> APICommand.INSTANCE.register(event.getDispatcher()) ); } - private void initSystems() { - ReiParticlesNetwork.init(); + private void initSystems(IEventBus modBus) { + modBus.addListener(ReiParticlesNetwork::registerPayloads); ParticleEmittersManager.registerBuiltinCodecs(); EmittersShootTypes.INSTANCE.init(); WindDirections.INSTANCE.init(); @@ -113,8 +103,7 @@ private void initSystems() { // ---- Tick handlers (each manager wrapped in try-catch) ---- private void onClientEndTick() { - safeTick("ClientTickEventForwarder", () -> - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClientTickEventForwarder::onClientEndTick)); + safeTick("ClientTickEventForwarder", ClientTickEventForwarder::onClientEndTick); safeTick("AnimateManager.client", () -> AnimateManager.INSTANCE.tickClient()); safeTick("ParticleEmittersManager.client", ParticleEmittersManager::tickClient); safeTick("DisplayEntityManager.client", () -> DisplayEntityManager.INSTANCE.tickClient()); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java index b5eb31e..6e8fa1a 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java @@ -194,7 +194,7 @@ private static void registerPrimitives() { private static void registerArrays() { INSTANCE.register(byte[].class, BufferCodec.of( - FriendlyByteBuf::writeByteArray, FriendlyByteBuf::readByteArray)); + (FriendlyByteBuf buf, byte[] v) -> buf.writeByteArray(v), buf -> buf.readByteArray())); INSTANCE.register(long[].class, BufferCodec.of( FriendlyByteBuf::writeLongArray, FriendlyByteBuf::readLongArray)); INSTANCE.register(int[].class, BufferCodec.of( @@ -212,12 +212,12 @@ private static void registerArrays() { private static void registerJavaTypes() { INSTANCE.register(String.class, BufferCodec.of( - FriendlyByteBuf::writeUtf, - FriendlyByteBuf::readUtf + (FriendlyByteBuf buf, String v) -> buf.writeUtf(v), + (FriendlyByteBuf buf) -> buf.readUtf() )); INSTANCE.register(UUID.class, BufferCodec.of( - FriendlyByteBuf::writeUUID, - FriendlyByteBuf::readUUID + (FriendlyByteBuf buf, UUID v) -> buf.writeUUID(v), + buf -> buf.readUUID() )); } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/client/CameraShakeClientState.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/client/CameraShakeClientState.java index 74bc7ba..9422efa 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/client/CameraShakeClientState.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/client/CameraShakeClientState.java @@ -8,12 +8,12 @@ import net.minecraft.client.player.LocalPlayer; import net.minecraft.util.RandomSource; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; -@Mod.EventBusSubscriber(modid = ReiParticlesAPIForge.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) +@EventBusSubscriber(modid = ReiParticlesAPIForge.MOD_ID, bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT) public final class CameraShakeClientState { private static final RandomSource RANDOM = RandomSource.create(); @@ -33,8 +33,8 @@ public static void start(CameraShakeS2CPacket packet) { } @SubscribeEvent - public static void onClientTick(TickEvent.ClientTickEvent event) { - if (event.phase != TickEvent.Phase.END || remainingTicks <= 0) { + public static void onClientTick(ClientTickEvent.Post event) { + if (remainingTicks <= 0) { return; } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java index c14b218..e9e8105 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java @@ -2,7 +2,7 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.config; -import net.minecraftforge.common.ForgeConfigSpec; +import net.neoforged.neoforge.common.ModConfigSpec; import org.apache.commons.lang3.tuple.Pair; /** @@ -13,24 +13,24 @@ */ public final class APIConfig { - public static final ForgeConfigSpec SPEC; + public static final ModConfigSpec SPEC; public static final APIConfig INSTANCE; static { - Pair pair = - new ForgeConfigSpec.Builder().configure(APIConfig::new); + Pair pair = + new ModConfigSpec.Builder().configure(APIConfig::new); INSTANCE = pair.getLeft(); SPEC = pair.getRight(); } - private final ForgeConfigSpec.BooleanValue enabledParticleCountInject; - private final ForgeConfigSpec.BooleanValue enabledParticleAsync; - private final ForgeConfigSpec.IntValue particleCountLimit; - private final ForgeConfigSpec.IntValue calculateThreadCount; - private final ForgeConfigSpec.IntValue packetsPerTickLimit; - private final ForgeConfigSpec.IntValue maxEmitterVisibleRange; + private final ModConfigSpec.BooleanValue enabledParticleCountInject; + private final ModConfigSpec.BooleanValue enabledParticleAsync; + private final ModConfigSpec.IntValue particleCountLimit; + private final ModConfigSpec.IntValue calculateThreadCount; + private final ModConfigSpec.IntValue packetsPerTickLimit; + private final ModConfigSpec.IntValue maxEmitterVisibleRange; - private APIConfig(ForgeConfigSpec.Builder builder) { + private APIConfig(ModConfigSpec.Builder builder) { builder.push("particles"); enabledParticleCountInject = builder @@ -75,7 +75,7 @@ private APIConfig(ForgeConfigSpec.Builder builder) { public int getPacketsPerTickLimit() { return safeGet(packetsPerTickLimit, 512); } public int getMaxEmitterVisibleRange() { return safeGet(maxEmitterVisibleRange, 256); } - private static T safeGet(ForgeConfigSpec.ConfigValue value, T fallback) { + private static T safeGet(ModConfigSpec.ConfigValue value, T fallback) { try { return value.get(); } catch (IllegalStateException e) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java index f3cff37..1a2052b 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java @@ -17,15 +17,15 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.common.MinecraftForge; +import net.neoforged.neoforge.common.NeoForge; import net.minecraft.client.Minecraft; -import net.minecraftforge.client.event.ClientPlayerNetworkEvent; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.event.entity.living.LivingDeathEvent; -import net.minecraftforge.event.entity.living.LivingEvent; -import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.event.level.BlockEvent; +import net.neoforged.neoforge.client.event.ClientPlayerNetworkEvent; +import net.neoforged.neoforge.event.entity.living.LivingDeathEvent; +import net.neoforged.neoforge.event.entity.living.LivingEvent; +import net.neoforged.neoforge.event.entity.player.PlayerDestroyItemEvent; +import net.neoforged.neoforge.event.entity.player.PlayerEvent; +import net.neoforged.neoforge.event.level.BlockEvent; +import net.neoforged.neoforge.event.tick.PlayerTickEvent; public final class ForgeEventForwarder { private static boolean initialized; @@ -39,29 +39,29 @@ public static void init() { } initialized = true; - MinecraftForge.EVENT_BUS.addListener((PlayerEvent.PlayerLoggedInEvent event) -> + NeoForge.EVENT_BUS.addListener((PlayerEvent.PlayerLoggedInEvent event) -> ReiEventBus.call(new PlayerLoggedInEvent(event.getEntity()))); - MinecraftForge.EVENT_BUS.addListener((PlayerEvent.PlayerLoggedOutEvent event) -> + NeoForge.EVENT_BUS.addListener((PlayerEvent.PlayerLoggedOutEvent event) -> ReiEventBus.call(new PlayerDisconnectEvent(event.getEntity()))); - MinecraftForge.EVENT_BUS.addListener((PlayerDestroyItemEvent event) -> + NeoForge.EVENT_BUS.addListener((PlayerDestroyItemEvent event) -> ReiEventBus.call(new PlayerItemDestroyEvent(event.getEntity(), event.getOriginal()))); - MinecraftForge.EVENT_BUS.addListener((PlayerEvent.PlayerRespawnEvent event) -> + NeoForge.EVENT_BUS.addListener((PlayerEvent.PlayerRespawnEvent event) -> ReiEventBus.call(new ServerPlayerRespawnEvent(event.getEntity(), event.getEntity().level()))); - MinecraftForge.EVENT_BUS.addListener((LivingDeathEvent event) -> { + NeoForge.EVENT_BUS.addListener((LivingDeathEvent event) -> { if (!(event.getEntity() instanceof Player player)) { return; } ServerPlayerDeathEvent deathEvent = ReiEventBus.call(new ServerPlayerDeathEvent(player, player.level(), event.getSource())); - if (deathEvent.isCancelled() && event.isCancelable()) { + if (deathEvent.isCancelled()) { event.setCanceled(true); } }); - MinecraftForge.EVENT_BUS.addListener((BlockEvent.BreakEvent event) -> { + NeoForge.EVENT_BUS.addListener((BlockEvent.BreakEvent event) -> { Player player = event.getPlayer(); if (player == null) { return; @@ -74,22 +74,18 @@ public static void init() { } }); - MinecraftForge.EVENT_BUS.addListener((TickEvent.PlayerTickEvent event) -> { - if (event.phase == TickEvent.Phase.START) { - EntityPreTickEvent preTickEvent = ReiEventBus.call(new EntityPreTickEvent(event.player)); - if (preTickEvent.isCancelled() && event.isCancelable()) { - event.setCanceled(true); - } - return; - } - ReiEventBus.call(new EntityPostTickEvent(event.player)); + NeoForge.EVENT_BUS.addListener((PlayerTickEvent.Pre event) -> { + ReiEventBus.call(new EntityPreTickEvent(event.getEntity())); + }); + NeoForge.EVENT_BUS.addListener((PlayerTickEvent.Post event) -> { + ReiEventBus.call(new EntityPostTickEvent(event.getEntity())); }); // Client/Server/World tick events are forwarded by ClientTickEventForwarder // and ReiParticlesAPIForge lifecycle hooks to avoid duplication. // Client world change (dimension switch / join) - MinecraftForge.EVENT_BUS.addListener((ClientPlayerNetworkEvent.LoggingIn event) -> { + NeoForge.EVENT_BUS.addListener((ClientPlayerNetworkEvent.LoggingIn event) -> { Minecraft mc = Minecraft.getInstance(); if (mc.level != null) { ReiEventBus.call(new ClientWorldChangeEvent(mc.level)); @@ -97,19 +93,19 @@ public static void init() { }); // Entity place block - MinecraftForge.EVENT_BUS.addListener((BlockEvent.EntityPlaceEvent event) -> { + NeoForge.EVENT_BUS.addListener((BlockEvent.EntityPlaceEvent event) -> { Entity entity = event.getEntity(); if (entity == null) return; EntityPrePlaceBlockEvent placeEvent = ReiEventBus.call( new EntityPrePlaceBlockEvent(entity, entity.level(), event.getPos(), null) ); - if (placeEvent.isCancelled() && event.isCancelable()) { + if (placeEvent.isCancelled()) { event.setCanceled(true); } }); // Entity movement approximation (via LivingTickEvent) - MinecraftForge.EVENT_BUS.addListener((LivingEvent.LivingTickEvent event) -> { + NeoForge.EVENT_BUS.addListener((net.neoforged.neoforge.event.tick.EntityTickEvent.Post event) -> { Entity entity = event.getEntity(); Vec3 pos = entity.position(); Vec3 delta = entity.getDeltaMovement(); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java index db8adff..bfc978b 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java @@ -2,7 +2,6 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network; -import com.reiasu.reiparticlesapi.ReiParticlesAPIForge; import com.reiasu.reiparticlesapi.network.packet.CameraShakeS2CPacket; import com.reiasu.reiparticlesapi.network.packet.PacketCameraShakeS2C; import com.reiasu.reiparticlesapi.network.packet.PacketDisplayEntityS2C; @@ -14,49 +13,41 @@ import com.reiasu.reiparticlesapi.network.packet.PacketParticleStyleS2C; import com.reiasu.reiparticlesapi.network.packet.PacketRenderEntityS2C; import com.mojang.logging.LogUtils; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.network.NetworkRegistry; -import net.minecraftforge.network.PacketDistributor; -import net.minecraftforge.network.simple.SimpleChannel; +import net.neoforged.neoforge.network.PacketDistributor; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; import org.slf4j.Logger; public final class ReiParticlesNetwork { private static final Logger LOGGER = LogUtils.getLogger(); - private static final int PROTOCOL_VERSION = 1; - private static int packetId = 0; - - public static final SimpleChannel CHANNEL = NetworkRegistry.ChannelBuilder - .named(new ResourceLocation(ReiParticlesAPIForge.MOD_ID, "main")) - .networkProtocolVersion(() -> Integer.toString(PROTOCOL_VERSION)) - .clientAcceptedVersions(v -> true) - .serverAcceptedVersions(v -> true) - .simpleChannel(); private ReiParticlesNetwork() { } - public static void init() { - CHANNEL.registerMessage(packetId++, CameraShakeS2CPacket.class, CameraShakeS2CPacket::encode, CameraShakeS2CPacket::decode, CameraShakeS2CPacket::handle); - CHANNEL.registerMessage(packetId++, PacketCameraShakeS2C.class, PacketCameraShakeS2C::encode, PacketCameraShakeS2C::decode, PacketCameraShakeS2C::handle); - CHANNEL.registerMessage(packetId++, PacketParticleS2C.class, PacketParticleS2C::encode, PacketParticleS2C::decode, PacketParticleS2C::handle); - CHANNEL.registerMessage(packetId++, PacketParticleEmittersS2C.class, PacketParticleEmittersS2C::encode, PacketParticleEmittersS2C::decode, PacketParticleEmittersS2C::handle); - CHANNEL.registerMessage(packetId++, PacketParticleCompositionS2C.class, PacketParticleCompositionS2C::encode, PacketParticleCompositionS2C::decode, PacketParticleCompositionS2C::handle); - CHANNEL.registerMessage(packetId++, PacketDisplayEntityS2C.class, PacketDisplayEntityS2C::encode, PacketDisplayEntityS2C::decode, PacketDisplayEntityS2C::handle); - CHANNEL.registerMessage(packetId++, PacketParticleStyleS2C.class, PacketParticleStyleS2C::encode, PacketParticleStyleS2C::decode, PacketParticleStyleS2C::handle); - CHANNEL.registerMessage(packetId++, PacketParticleGroupS2C.class, PacketParticleGroupS2C::encode, PacketParticleGroupS2C::decode, PacketParticleGroupS2C::handle); - CHANNEL.registerMessage(packetId++, PacketRenderEntityS2C.class, PacketRenderEntityS2C::encode, PacketRenderEntityS2C::decode, PacketRenderEntityS2C::handle); - CHANNEL.registerMessage(packetId++, PacketKeyActionC2S.class, PacketKeyActionC2S::encode, PacketKeyActionC2S::decode, PacketKeyActionC2S::handle); + public static void registerPayloads(RegisterPayloadHandlersEvent event) { + PayloadRegistrar registrar = event.registrar("1").optional(); + registrar.playToClient(CameraShakeS2CPacket.TYPE, CameraShakeS2CPacket.STREAM_CODEC, CameraShakeS2CPacket::handle); + registrar.playToClient(PacketCameraShakeS2C.TYPE, PacketCameraShakeS2C.STREAM_CODEC, PacketCameraShakeS2C::handle); + registrar.playToClient(PacketParticleS2C.TYPE, PacketParticleS2C.STREAM_CODEC, PacketParticleS2C::handle); + registrar.playToClient(PacketParticleEmittersS2C.TYPE, PacketParticleEmittersS2C.STREAM_CODEC, PacketParticleEmittersS2C::handle); + registrar.playToClient(PacketParticleCompositionS2C.TYPE, PacketParticleCompositionS2C.STREAM_CODEC, PacketParticleCompositionS2C::handle); + registrar.playToClient(PacketDisplayEntityS2C.TYPE, PacketDisplayEntityS2C.STREAM_CODEC, PacketDisplayEntityS2C::handle); + registrar.playToClient(PacketParticleStyleS2C.TYPE, PacketParticleStyleS2C.STREAM_CODEC, PacketParticleStyleS2C::handle); + registrar.playToClient(PacketParticleGroupS2C.TYPE, PacketParticleGroupS2C.STREAM_CODEC, PacketParticleGroupS2C::handle); + registrar.playToClient(PacketRenderEntityS2C.TYPE, PacketRenderEntityS2C.STREAM_CODEC, PacketRenderEntityS2C::handle); + registrar.playToServer(PacketKeyActionC2S.TYPE, PacketKeyActionC2S.STREAM_CODEC, PacketKeyActionC2S::handle); } - public static void sendTo(ServerPlayer player, Object packet) { + public static void sendTo(ServerPlayer player, CustomPacketPayload packet) { try { - CHANNEL.send(PacketDistributor.PLAYER.with(() -> player), packet); + PacketDistributor.sendToPlayer(player, packet); } catch (IllegalArgumentException e) { LOGGER.debug("Player {} lacks channel — packet {} dropped", - player.getName().getString(), packet.getClass().getSimpleName()); + player.getName().getString(), packet.type().id()); } catch (RuntimeException e) { - LOGGER.debug("Failed to send packet {} to {}: {}", packet.getClass().getSimpleName(), + LOGGER.debug("Failed to send packet {} to {}: {}", packet.type().id(), player.getName().getString(), e.getMessage()); } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/BooleanControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/BooleanControllerBuffer.java index d71db1f..f90ca51 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/BooleanControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/BooleanControllerBuffer.java @@ -6,7 +6,7 @@ public final class BooleanControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "boolean")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "boolean")); @Override public byte[] encode(Boolean value) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java index f8bc3e5..3f77977 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java @@ -11,7 +11,7 @@ */ public final class CharControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "char")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "char")); @Override public byte[] encode(Character value) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/DoubleControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/DoubleControllerBuffer.java index 2e5e425..c58e34b 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/DoubleControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/DoubleControllerBuffer.java @@ -8,7 +8,7 @@ public final class DoubleControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "double")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "double")); @Override public byte[] encode(Double value) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/EmptyControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/EmptyControllerBuffer.java index 1747b68..5b22aa3 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/EmptyControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/EmptyControllerBuffer.java @@ -6,7 +6,7 @@ public final class EmptyControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "empty")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "empty")); @Override public byte[] encode(Void value) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/FloatControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/FloatControllerBuffer.java index 03d817d..3e4a7a4 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/FloatControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/FloatControllerBuffer.java @@ -8,7 +8,7 @@ public final class FloatControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "float")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "float")); @Override public byte[] encode(Float value) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntArrayControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntArrayControllerBuffer.java index 29444d8..e33019c 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntArrayControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntArrayControllerBuffer.java @@ -8,7 +8,7 @@ public final class IntArrayControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "int_array")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "int_array")); @Override public byte[] encode(int[] value) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntControllerBuffer.java index ba5fa2e..8e86b71 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntControllerBuffer.java @@ -8,7 +8,7 @@ public final class IntControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "int")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "int")); @Override public byte[] encode(Integer value) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongArrayControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongArrayControllerBuffer.java index 1447085..71eac81 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongArrayControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongArrayControllerBuffer.java @@ -8,7 +8,7 @@ public final class LongArrayControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "long_array")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "long_array")); @Override public byte[] encode(long[] value) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongControllerBuffer.java index 0ad2cb4..00416fb 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongControllerBuffer.java @@ -8,7 +8,7 @@ public final class LongControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "long")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "long")); @Override public byte[] encode(Long value) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java index 83b9730..ab2cb9c 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java @@ -18,7 +18,7 @@ */ public final class NestedBuffersControllerBuffer extends AbstractControllerBuffer>> { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "nested_buffers")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "nested_buffers")); @Override public byte[] encode(List> value) { @@ -59,7 +59,7 @@ public List> decode(byte[] buf) { byte[] data = new byte[dataLen]; dis.readFully(data); ParticleControllerDataBuffer.Id id = - new ParticleControllerDataBuffer.Id(new ResourceLocation(idStr)); + new ParticleControllerDataBuffer.Id(ResourceLocation.parse(idStr)); ParticleControllerDataBuffer decoded = ParticleControllerDataBuffers.INSTANCE.withIdDecode(id, data); if (decoded != null) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffer.java index 6c1a001..d58f0f2 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffer.java @@ -36,7 +36,7 @@ public static Id toID(String string) { if (split.length != 2 || split[0].isBlank() || split[1].isBlank()) { throw new IllegalArgumentException("Invalid ID format: " + string); } - return new Id(new ResourceLocation(split[0], split[1])); + return new Id(ResourceLocation.fromNamespaceAndPath(split[0], split[1])); } } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/RelativeLocationControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/RelativeLocationControllerBuffer.java index e460131..00344cf 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/RelativeLocationControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/RelativeLocationControllerBuffer.java @@ -9,7 +9,7 @@ public final class RelativeLocationControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "relative_location")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "relative_location")); @Override public byte[] encode(RelativeLocation value) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ShortControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ShortControllerBuffer.java index 4c1d393..a017392 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ShortControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ShortControllerBuffer.java @@ -8,7 +8,7 @@ public final class ShortControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "short")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "short")); @Override public byte[] encode(Short value) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/StringControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/StringControllerBuffer.java index 2e13fac..1abadd1 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/StringControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/StringControllerBuffer.java @@ -8,7 +8,7 @@ public final class StringControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "string")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "string")); @Override public byte[] encode(String value) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/UUIDControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/UUIDControllerBuffer.java index 3b28c5c..d340eb2 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/UUIDControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/UUIDControllerBuffer.java @@ -9,7 +9,7 @@ public final class UUIDControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "uuid")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "uuid")); @Override public byte[] encode(UUID value) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/Vec3dControllerBuffer.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/Vec3dControllerBuffer.java index d0412bc..5d0c712 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/Vec3dControllerBuffer.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/Vec3dControllerBuffer.java @@ -9,7 +9,7 @@ public final class Vec3dControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = - new ParticleControllerDataBuffer.Id(new ResourceLocation("reiparticlesapi", "vec3d")); + new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "vec3d")); @Override public byte[] encode(Vec3 value) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacket.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacket.java index 60ed30b..16ab747 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacket.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacket.java @@ -4,14 +4,18 @@ import com.reiasu.reiparticlesapi.client.CameraShakeClientState; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.IPayloadContext; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.network.NetworkEvent; -import java.util.function.Supplier; -public record CameraShakeS2CPacket(double range, Vec3 origin, double amplitude, int tick) { +public record CameraShakeS2CPacket(double range, Vec3 origin, double amplitude, int tick) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "camera_shake_s2_c_packet")); + public static final StreamCodec STREAM_CODEC = StreamCodec.of((buf, pkt) -> encode(pkt, buf), CameraShakeS2CPacket::decode); + public static void encode(CameraShakeS2CPacket packet, FriendlyByteBuf buf) { buf.writeDouble(packet.range); buf.writeDouble(packet.origin.x); @@ -29,11 +33,10 @@ public static CameraShakeS2CPacket decode(FriendlyByteBuf buf) { return new CameraShakeS2CPacket(range, origin, amplitude, tick); } - public static void handle(CameraShakeS2CPacket packet, Supplier contextSupplier) { - NetworkEvent.Context context = contextSupplier.get(); - context.enqueueWork(() -> - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> CameraShakeClientState.start(packet)) - ); - context.setPacketHandled(true); + public static void handle(CameraShakeS2CPacket packet, IPayloadContext context) { + context.enqueueWork(() -> CameraShakeClientState.start(packet)); } + + @Override + public Type type() { return TYPE; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketCameraShakeS2C.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketCameraShakeS2C.java index 9851938..3f097f5 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketCameraShakeS2C.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketCameraShakeS2C.java @@ -4,14 +4,18 @@ import com.reiasu.reiparticlesapi.network.packet.client.listener.ClientCameraShakeHandler; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.IPayloadContext; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.network.NetworkEvent; -import java.util.function.Supplier; -public record PacketCameraShakeS2C(double range, Vec3 origin, double amplitude, int tick) { +public record PacketCameraShakeS2C(double range, Vec3 origin, double amplitude, int tick) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "packet_camera_shake_s2_c")); + public static final StreamCodec STREAM_CODEC = StreamCodec.of((buf, pkt) -> encode(pkt, buf), PacketCameraShakeS2C::decode); + public static void encode(PacketCameraShakeS2C packet, FriendlyByteBuf buf) { buf.writeDouble(packet.range); buf.writeDouble(packet.origin.x); @@ -29,13 +33,10 @@ public static PacketCameraShakeS2C decode(FriendlyByteBuf buf) { return new PacketCameraShakeS2C(range, origin, amplitude, tick); } - public static void handle(PacketCameraShakeS2C packet, Supplier contextSupplier) { - NetworkEvent.Context context = contextSupplier.get(); - context.enqueueWork(() -> - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - ClientCameraShakeHandler.receive(packet); - }) - ); - context.setPacketHandled(true); + public static void handle(PacketCameraShakeS2C packet, IPayloadContext context) { + context.enqueueWork(() -> ClientCameraShakeHandler.receive(packet)); } + + @Override + public Type type() { return TYPE; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketDisplayEntityS2C.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketDisplayEntityS2C.java index 7cce080..2125cff 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketDisplayEntityS2C.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketDisplayEntityS2C.java @@ -4,16 +4,20 @@ import com.reiasu.reiparticlesapi.network.packet.client.listener.ClientDisplayEntityPacketHandler; import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.IPayloadContext; import java.util.UUID; -import java.util.function.Supplier; -public record PacketDisplayEntityS2C(UUID uuid, String type, byte[] data) { +public record PacketDisplayEntityS2C(UUID uuid, String entityType, byte[] data) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "packet_display_entity_s2_c")); + public static final StreamCodec STREAM_CODEC = StreamCodec.of((buf, pkt) -> encode(pkt, buf), PacketDisplayEntityS2C::decode); + public static void encode(PacketDisplayEntityS2C packet, FriendlyByteBuf buf) { - buf.writeUtf(packet.type); + buf.writeUtf(packet.entityType); buf.writeUUID(packet.uuid); buf.writeInt(packet.data.length); buf.writeBytes(packet.data); @@ -28,9 +32,10 @@ public static PacketDisplayEntityS2C decode(FriendlyByteBuf buf) { return new PacketDisplayEntityS2C(uuid, type, data); } - public static void handle(PacketDisplayEntityS2C packet, Supplier contextSupplier) { - NetworkEvent.Context context = contextSupplier.get(); - context.enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ClientDisplayEntityPacketHandler.receive(packet))); - context.setPacketHandled(true); + public static void handle(PacketDisplayEntityS2C packet, IPayloadContext context) { + context.enqueueWork(() -> ClientDisplayEntityPacketHandler.receive(packet)); } + + @Override + public Type type() { return TYPE; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketKeyActionC2S.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketKeyActionC2S.java index 235afdc..a3aaba9 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketKeyActionC2S.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketKeyActionC2S.java @@ -5,13 +5,18 @@ import com.reiasu.reiparticlesapi.event.events.key.KeyActionType; import com.reiasu.reiparticlesapi.network.packet.server.listener.ServerKeyActionHandler; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.IPayloadContext; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.network.NetworkEvent; -import java.util.function.Supplier; -public record PacketKeyActionC2S(ResourceLocation keyId, KeyActionType action, int pressTick, boolean isRelease) { +public record PacketKeyActionC2S(ResourceLocation keyId, KeyActionType action, int pressTick, boolean isRelease) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "packet_key_action_c2_s")); + public static final StreamCodec STREAM_CODEC = StreamCodec.of((buf, pkt) -> encode(pkt, buf), PacketKeyActionC2S::decode); + public static void encode(PacketKeyActionC2S packet, FriendlyByteBuf buf) { buf.writeResourceLocation(packet.keyId); buf.writeInt(packet.action.getId()); @@ -27,13 +32,12 @@ public static PacketKeyActionC2S decode(FriendlyByteBuf buf) { return new PacketKeyActionC2S(keyId, action, pressTick, isRelease); } - public static void handle(PacketKeyActionC2S packet, Supplier contextSupplier) { - NetworkEvent.Context context = contextSupplier.get(); - ServerPlayer sender = context.getSender(); - if (sender != null) { + public static void handle(PacketKeyActionC2S packet, IPayloadContext context) { + if (context.player() instanceof ServerPlayer sender) { context.enqueueWork(() -> ServerKeyActionHandler.receive(packet, sender)); } - context.setPacketHandled(true); } -} + @Override + public Type type() { return TYPE; } +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleCompositionS2C.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleCompositionS2C.java index d4cc02c..b840db2 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleCompositionS2C.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleCompositionS2C.java @@ -4,14 +4,18 @@ import com.reiasu.reiparticlesapi.network.packet.client.listener.ClientParticleCompositionHandler; import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.IPayloadContext; import java.util.UUID; -import java.util.function.Supplier; -public final class PacketParticleCompositionS2C { +public final class PacketParticleCompositionS2C implements CustomPacketPayload { + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "packet_particle_composition_s2c")); + public static final StreamCodec STREAM_CODEC = StreamCodec.of((buf, pkt) -> encode(pkt, buf), PacketParticleCompositionS2C::decode); + private final UUID uuid; private final String type; private final byte[] data; @@ -63,9 +67,10 @@ public static PacketParticleCompositionS2C decode(FriendlyByteBuf buf) { return packet; } - public static void handle(PacketParticleCompositionS2C packet, Supplier contextSupplier) { - NetworkEvent.Context context = contextSupplier.get(); - context.enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ClientParticleCompositionHandler.receive(packet))); - context.setPacketHandled(true); + public static void handle(PacketParticleCompositionS2C packet, IPayloadContext context) { + context.enqueueWork(() -> ClientParticleCompositionHandler.receive(packet)); } + + @Override + public Type type() { return TYPE; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleEmittersS2C.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleEmittersS2C.java index 1c7e478..b1d83bc 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleEmittersS2C.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleEmittersS2C.java @@ -4,14 +4,17 @@ import com.reiasu.reiparticlesapi.network.packet.client.listener.ClientParticleEmittersPacketHandler; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.network.NetworkEvent; +import net.neoforged.neoforge.network.handling.IPayloadContext; -import java.util.function.Supplier; -public record PacketParticleEmittersS2C(ResourceLocation emitterKey, byte[] emitterData, PacketType type) { +public record PacketParticleEmittersS2C(ResourceLocation emitterKey, byte[] emitterData, PacketType packetType) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "packet_particle_emitters_s2_c")); + public static final StreamCodec STREAM_CODEC = StreamCodec.of((buf, pkt) -> encode(pkt, buf), PacketParticleEmittersS2C::decode); + public enum PacketType { CHANGE_OR_CREATE(0), REMOVE(1); @@ -36,7 +39,7 @@ public static PacketType fromID(int id) { } public static void encode(PacketParticleEmittersS2C packet, FriendlyByteBuf buf) { - buf.writeVarInt(packet.type.getId()); + buf.writeVarInt(packet.packetType.getId()); buf.writeResourceLocation(packet.emitterKey); buf.writeVarInt(packet.emitterData.length); buf.writeBytes(packet.emitterData); @@ -51,9 +54,10 @@ public static PacketParticleEmittersS2C decode(FriendlyByteBuf buf) { return new PacketParticleEmittersS2C(key, data, packetType); } - public static void handle(PacketParticleEmittersS2C packet, Supplier contextSupplier) { - NetworkEvent.Context context = contextSupplier.get(); - context.enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ClientParticleEmittersPacketHandler.receive(packet))); - context.setPacketHandled(true); + public static void handle(PacketParticleEmittersS2C packet, IPayloadContext context) { + context.enqueueWork(() -> ClientParticleEmittersPacketHandler.receive(packet)); } + + @Override + public Type type() { return TYPE; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleGroupS2C.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleGroupS2C.java index 33d512f..5c852a5 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleGroupS2C.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleGroupS2C.java @@ -7,20 +7,24 @@ import com.reiasu.reiparticlesapi.network.packet.client.listener.ClientParticleGroupPacketHandler; import com.reiasu.reiparticlesapi.particles.control.ControlType; import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.IPayloadContext; import java.util.HashMap; import java.util.Map; import java.util.UUID; -import java.util.function.Supplier; public record PacketParticleGroupS2C( UUID uuid, - ControlType type, + ControlType controlType, Map> args -) { +) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "packet_particle_group_s2_c")); + public static final StreamCodec STREAM_CODEC = StreamCodec.of((buf, pkt) -> encode(pkt, buf), PacketParticleGroupS2C::decode); + public enum PacketArgsType { POS("pos"), CURRENT_TICK("current_tick"), @@ -58,7 +62,7 @@ public static PacketArgsType fromArgsName(String value) { public static void encode(PacketParticleGroupS2C packet, FriendlyByteBuf buf) { buf.writeUUID(packet.uuid); - buf.writeInt(packet.type.getId()); + buf.writeInt(packet.controlType.getId()); for (Map.Entry> entry : packet.args.entrySet()) { byte[] encoded = ParticleControllerDataBuffers.INSTANCE.encode(entry.getValue()); buf.writeInt(encoded.length); @@ -81,9 +85,10 @@ public static PacketParticleGroupS2C decode(FriendlyByteBuf buf) { return new PacketParticleGroupS2C(uuid, type, args); } - public static void handle(PacketParticleGroupS2C packet, Supplier contextSupplier) { - NetworkEvent.Context context = contextSupplier.get(); - context.enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ClientParticleGroupPacketHandler.receive(packet))); - context.setPacketHandled(true); + public static void handle(PacketParticleGroupS2C packet, IPayloadContext context) { + context.enqueueWork(() -> ClientParticleGroupPacketHandler.receive(packet)); } + + @Override + public Type type() { return TYPE; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleS2C.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleS2C.java index 91a551e..cae944d 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleS2C.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleS2C.java @@ -7,20 +7,24 @@ import net.minecraft.core.particles.ParticleType; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.IPayloadContext; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.network.NetworkEvent; -import java.util.function.Supplier; -public record PacketParticleS2C(ParticleOptions type, Vec3 pos, Vec3 velocity) { - public static void encode(PacketParticleS2C packet, FriendlyByteBuf buf) { - ResourceLocation id = BuiltInRegistries.PARTICLE_TYPE.getKey(packet.type.getType()); +public record PacketParticleS2C(ParticleOptions particleOptions, Vec3 pos, Vec3 velocity) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "packet_particle_s2_c")); + public static final StreamCodec STREAM_CODEC = StreamCodec.of((buf, pkt) -> encode(pkt, buf), PacketParticleS2C::decode); + + @SuppressWarnings({"rawtypes", "unchecked"}) + public static void encode(PacketParticleS2C packet, RegistryFriendlyByteBuf buf) { + ResourceLocation id = BuiltInRegistries.PARTICLE_TYPE.getKey(packet.particleOptions.getType()); buf.writeResourceLocation(id); - packet.type.writeToNetwork(buf); + ParticleType type = packet.particleOptions.getType(); + ((StreamCodec) type.streamCodec()).encode(buf, packet.particleOptions); buf.writeDouble(packet.pos.x); buf.writeDouble(packet.pos.y); buf.writeDouble(packet.pos.z); @@ -29,26 +33,26 @@ public static void encode(PacketParticleS2C packet, FriendlyByteBuf buf) { buf.writeDouble(packet.velocity.z); } - public static PacketParticleS2C decode(FriendlyByteBuf buf) { + @SuppressWarnings({"rawtypes", "unchecked"}) + public static PacketParticleS2C decode(RegistryFriendlyByteBuf buf) { ResourceLocation id = buf.readResourceLocation(); - ParticleType particleType = BuiltInRegistries.PARTICLE_TYPE.get(id); - if (particleType == null) { - particleType = ParticleTypes.END_ROD; + ParticleType type = BuiltInRegistries.PARTICLE_TYPE.getOptional(id).orElse(null); + ParticleOptions options; + if (type != null) { + options = (ParticleOptions) type.streamCodec().decode(buf); + } else { + options = ParticleTypes.END_ROD; } - ParticleOptions options = readParticleOptions(particleType, buf); Vec3 pos = new Vec3(buf.readDouble(), buf.readDouble(), buf.readDouble()); Vec3 velocity = new Vec3(buf.readDouble(), buf.readDouble(), buf.readDouble()); return new PacketParticleS2C(options, pos, velocity); } - public static void handle(PacketParticleS2C packet, Supplier contextSupplier) { - NetworkEvent.Context context = contextSupplier.get(); - context.enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ClientParticlePacketHandler.receive(packet))); - context.setPacketHandled(true); + public static void handle(PacketParticleS2C packet, IPayloadContext context) { + context.enqueueWork(() -> ClientParticlePacketHandler.receive(packet)); } - @SuppressWarnings({"rawtypes", "unchecked"}) - private static ParticleOptions readParticleOptions(ParticleType type, FriendlyByteBuf buf) { - return ((ParticleOptions.Deserializer) type.getDeserializer()).fromNetwork((ParticleType) type, buf); - } + @Override + public Type type() { return TYPE; } + } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleStyleS2C.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleStyleS2C.java index dbb27c6..dfbf0c2 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleStyleS2C.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleStyleS2C.java @@ -7,27 +7,31 @@ import com.reiasu.reiparticlesapi.network.packet.client.listener.ClientParticleStylePacketHandler; import com.reiasu.reiparticlesapi.particles.control.ControlType; import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.network.NetworkEvent; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.IPayloadContext; import java.util.HashMap; import java.util.Map; import java.util.UUID; -import java.util.function.Supplier; public record PacketParticleStyleS2C( UUID uuid, - ControlType type, + ControlType controlType, Map> args -) { +) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "packet_particle_style_s2_c")); + public static final StreamCodec STREAM_CODEC = StreamCodec.of((buf, pkt) -> encode(pkt, buf), PacketParticleStyleS2C::decode); + public PacketParticleStyleS2C { args = Map.copyOf(args); } public static void encode(PacketParticleStyleS2C packet, FriendlyByteBuf buf) { buf.writeUUID(packet.uuid); - buf.writeInt(packet.type.getId()); + buf.writeInt(packet.controlType.getId()); buf.writeInt(packet.args.size()); for (Map.Entry> entry : packet.args.entrySet()) { byte[] encoded = ParticleControllerDataBuffers.INSTANCE.encode(entry.getValue()); @@ -52,9 +56,10 @@ public static PacketParticleStyleS2C decode(FriendlyByteBuf buf) { return new PacketParticleStyleS2C(uuid, type, args); } - public static void handle(PacketParticleStyleS2C packet, Supplier contextSupplier) { - NetworkEvent.Context context = contextSupplier.get(); - context.enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ClientParticleStylePacketHandler.receive(packet))); - context.setPacketHandled(true); + public static void handle(PacketParticleStyleS2C packet, IPayloadContext context) { + context.enqueueWork(() -> ClientParticleStylePacketHandler.receive(packet)); } + + @Override + public Type type() { return TYPE; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketRenderEntityS2C.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketRenderEntityS2C.java index cf30142..2b8721e 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketRenderEntityS2C.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketRenderEntityS2C.java @@ -4,15 +4,18 @@ import com.reiasu.reiparticlesapi.network.packet.client.listener.ClientRenderEntityPacketHandler; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.network.NetworkEvent; +import net.neoforged.neoforge.network.handling.IPayloadContext; import java.util.UUID; -import java.util.function.Supplier; -public final class PacketRenderEntityS2C { +public final class PacketRenderEntityS2C implements CustomPacketPayload { + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "packet_render_entity_s2c")); + public static final StreamCodec STREAM_CODEC = StreamCodec.of((buf, pkt) -> encode(pkt, buf), PacketRenderEntityS2C::decode); + public enum Method { CREATE(0), TOGGLE(1), @@ -115,9 +118,10 @@ public static PacketRenderEntityS2C decode(FriendlyByteBuf buf) { return new PacketRenderEntityS2C(uuid, entity, id, method); } - public static void handle(PacketRenderEntityS2C packet, Supplier contextSupplier) { - NetworkEvent.Context context = contextSupplier.get(); - context.enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ClientRenderEntityPacketHandler.receive(packet))); - context.setPacketHandled(true); + public static void handle(PacketRenderEntityS2C packet, IPayloadContext context) { + context.enqueueWork(() -> ClientRenderEntityPacketHandler.receive(packet)); } + + @Override + public Type type() { return TYPE; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientDisplayEntityPacketHandler.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientDisplayEntityPacketHandler.java index 2a95735..96d83e4 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientDisplayEntityPacketHandler.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientDisplayEntityPacketHandler.java @@ -16,7 +16,7 @@ private ClientDisplayEntityPacketHandler() { public static void receive(PacketDisplayEntityS2C packet) { Function decoder = - DisplayEntityManager.INSTANCE.getRegisteredTypes().get(packet.type()); + DisplayEntityManager.INSTANCE.getRegisteredTypes().get(packet.entityType()); if (decoder == null) { return; } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleEmittersPacketHandler.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleEmittersPacketHandler.java index d812800..7afeecd 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleEmittersPacketHandler.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleEmittersPacketHandler.java @@ -26,7 +26,7 @@ public static void receive(PacketParticleEmittersS2C packet) { return; } Minecraft minecraft = Minecraft.getInstance(); - switch (packet.type()) { + switch (packet.packetType()) { case CHANGE_OR_CREATE -> { if (minecraft.level != null) { ParticleEmittersManager.createOrChangeClient(emitters, minecraft.level); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleGroupPacketHandler.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleGroupPacketHandler.java index 2714431..635e50d 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleGroupPacketHandler.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleGroupPacketHandler.java @@ -30,7 +30,7 @@ private ClientParticleGroupPacketHandler() { public static void receive(PacketParticleGroupS2C packet) { UUID uuid = packet.uuid(); - ControlType type = packet.type(); + ControlType type = packet.controlType(); switch (type) { case CREATE -> handleCreate(uuid, packet.args()); case CHANGE -> handleChange(uuid, packet.args()); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticlePacketHandler.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticlePacketHandler.java index f2edcd7..efe4ca3 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticlePacketHandler.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticlePacketHandler.java @@ -15,7 +15,7 @@ public static void receive(PacketParticleS2C packet) { return; } minecraft.level.addParticle( - packet.type(), + packet.particleOptions(), true, packet.pos().x, packet.pos().y, diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleStylePacketHandler.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleStylePacketHandler.java index e9c91fe..4f23727 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleStylePacketHandler.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleStylePacketHandler.java @@ -26,7 +26,7 @@ private ClientParticleStylePacketHandler() { public static void receive(PacketParticleStyleS2C packet) { UUID uuid = packet.uuid(); - ControlType type = packet.type(); + ControlType type = packet.controlType(); if (type == ControlType.CREATE) { handleCreate(uuid, packet.args()); return; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java index b25de74..9b94b85 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java @@ -130,7 +130,7 @@ public void remove() { for (UUID playerId : visible) { if (world.getPlayerByUUID(playerId) instanceof ServerPlayer sp) { PacketParticleGroupS2C packet = new PacketParticleGroupS2C( - uuid, ControlType.REMOVE, new HashMap<>()); + uuid, ControlType.REMOVE, Map.of()); ReiParticlesNetwork.sendTo(sp, packet); } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroupManager.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroupManager.java index e7bb363..d95924f 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroupManager.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroupManager.java @@ -26,6 +26,7 @@ public final class ServerParticleGroupManager { private final ConcurrentHashMap groups = new ConcurrentHashMap<>(); private final ConcurrentHashMap> visible = new ConcurrentHashMap<>(); + private final ConcurrentHashMap> groupToPlayers = new ConcurrentHashMap<>(); private ServerParticleGroupManager() {} @@ -41,9 +42,14 @@ public void addParticleGroup(ServerParticleGroup group, Vec3 pos, ServerLevel wo public void removeParticleGroup(ServerParticleGroup group) { groups.remove(group.getUuid()); - // Clean up visibility entries - for (Map.Entry> entry : visible.entrySet()) { - entry.getValue().remove(group); + Set players = groupToPlayers.remove(group.getUuid()); + if (players != null) { + for (UUID playerId : players) { + Set visibleSet = visible.get(playerId); + if (visibleSet != null) { + visibleSet.remove(group); + } + } } } @@ -51,13 +57,8 @@ public void removeParticleGroup(ServerParticleGroup group) { * Returns the set of player UUIDs that can currently see the given group. */ public Set filterVisiblePlayer(ServerParticleGroup group) { - Set result = new HashSet<>(); - for (Map.Entry> entry : visible.entrySet()) { - if (entry.getValue().contains(group)) { - result.add(entry.getKey()); - } - } - return result; + Set players = groupToPlayers.get(group.getUuid()); + return players != null ? new HashSet<>(players) : new HashSet<>(); } /** @@ -67,10 +68,12 @@ public void upgrade(MinecraftServer server) { if (server == null) return; clearOfflineVisible(server); - List groupList = new ArrayList<>(groups.values()); - for (ServerParticleGroup group : groupList) { + Iterator groupIterator = groups.values().iterator(); + while (groupIterator.hasNext()) { + ServerParticleGroup group = groupIterator.next(); if (group.getCanceled() || !group.getValid()) { - groups.remove(group.getUuid()); + groupIterator.remove(); + groupToPlayers.remove(group.getUuid()); continue; } @@ -87,6 +90,7 @@ public void upgrade(MinecraftServer server) { if (visibleSet.contains(group)) { removeGroupPlayerView(player, group); visibleSet.remove(group); + unlinkPlayerGroup(player.getUUID(), group.getUuid()); } continue; } @@ -96,6 +100,7 @@ public void upgrade(MinecraftServer server) { if (visibleSet.contains(group)) { removeGroupPlayerView(player, group); visibleSet.remove(group); + unlinkPlayerGroup(player.getUUID(), group.getUuid()); } continue; } @@ -111,6 +116,7 @@ public void upgrade(MinecraftServer server) { removeGroupPlayerView(player, group); } visibleSet.remove(group); + unlinkPlayerGroup(player.getUUID(), group.getUuid()); } } @@ -124,11 +130,22 @@ private void clearOfflineVisible(MinecraftServer server) { Map.Entry> entry = it.next(); ServerPlayer player = server.getPlayerList().getPlayer(entry.getKey()); if (player == null || player.hasDisconnected()) { + UUID playerId = entry.getKey(); + for (ServerParticleGroup g : entry.getValue()) { + unlinkPlayerGroup(playerId, g.getUuid()); + } it.remove(); } } } + private void unlinkPlayerGroup(UUID playerId, UUID groupId) { + Set players = groupToPlayers.get(groupId); + if (players != null) { + players.remove(playerId); + } + } + private void togglePacketView(ServerPlayer target, ServerParticleGroup group) { Map> args = new HashMap<>(); args.put(PacketParticleGroupS2C.PacketArgsType.POS.getOfArgs(), @@ -147,7 +164,7 @@ private void togglePacketView(ServerPlayer target, ServerParticleGroup group) { private void removeGroupPlayerView(ServerPlayer target, ServerParticleGroup targetGroup) { PacketParticleGroupS2C packet = new PacketParticleGroupS2C( - targetGroup.getUuid(), ControlType.REMOVE, new HashMap<>()); + targetGroup.getUuid(), ControlType.REMOVE, Map.of()); ReiParticlesNetwork.sendTo(target, packet); } @@ -155,6 +172,8 @@ private void addGroupPlayerView(ServerPlayer target, ServerParticleGroup targetG Set visibleSet = visible.computeIfAbsent( target.getUUID(), k -> ConcurrentHashMap.newKeySet()); visibleSet.add(targetGroup); + groupToPlayers.computeIfAbsent(targetGroup.getUuid(), k -> ConcurrentHashMap.newKeySet()) + .add(target.getUUID()); Map> args = new HashMap<>(); args.put(PacketParticleGroupS2C.PacketArgsType.POS.getOfArgs(), diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugParticleEmitters.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugParticleEmitters.java index 2f833e0..4aca0f9 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugParticleEmitters.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugParticleEmitters.java @@ -13,7 +13,7 @@ import java.util.UUID; public class DebugParticleEmitters extends ParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticlesapi", "debug_particle"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "debug_particle"); private final double x; private final double y; private final double z; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugRailgunEmitters.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugRailgunEmitters.java index d9076f3..467a9de 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugRailgunEmitters.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugRailgunEmitters.java @@ -14,7 +14,7 @@ import java.util.UUID; public final class DebugRailgunEmitters extends ParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticlesapi", "debug_railgun"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "debug_railgun"); private static final DustParticleOptions BEAM_COLOR = new DustParticleOptions(new Vector3f(1.0f, 0.55f, 0.62f), 1.2f); private final Vec3 from; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java index 42c0dd8..69eb368 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java @@ -27,7 +27,7 @@ * Every emitter subclass registered via {@code @ReiAutoRegister} must declare: *
{@code
  * public static final ResourceLocation CODEC_ID =
- *         new ResourceLocation("mymod", "my_emitter");
+ *         ResourceLocation.fromNamespaceAndPath("mymod", "my_emitter");
  *
  * public static MyEmitter decode(FriendlyByteBuf buf) {
  *     MyEmitter e = new MyEmitter();
diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java
index 59783f5..d51e713 100644
--- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java
+++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java
@@ -27,7 +27,7 @@
  */
 public final class DefendClassParticleEmitters extends ClassParticleEmitters {
 
-    public static final ResourceLocation ID = new ResourceLocation("reiparticlesapi", "defend_class");
+    public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "defend_class");
 
     private ControllableParticleData templateData = new ControllableParticleData();
     private final Random random = new Random(System.currentTimeMillis());
diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java
index f69bd19..1f2e420 100644
--- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java
+++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java
@@ -24,7 +24,7 @@
  */
 public final class ExampleClassParticleEmitters extends ClassParticleEmitters {
 
-    public static final ResourceLocation ID = new ResourceLocation("reiparticlesapi", "example_class");
+    public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "example_class");
 
     private ControllableParticleData templateData = new ControllableParticleData();
     private Vec3 moveDirection = Vec3.ZERO;
diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java
index 98bdeee..726fdc6 100644
--- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java
+++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java
@@ -27,7 +27,7 @@
  */
 public final class ExplodeClassParticleEmitters extends ClassParticleEmitters {
 
-    public static final ResourceLocation ID = new ResourceLocation("reiparticlesapi", "explode_class");
+    public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "explode_class");
 
     private ControllableParticleData templateData = new ControllableParticleData();
     private final Random random = new Random(System.currentTimeMillis());
diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java
index 7fe0cc3..e2d844f 100644
--- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java
+++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java
@@ -27,7 +27,7 @@
  */
 public final class FireClassParticleEmitters extends ClassParticleEmitters {
 
-    public static final ResourceLocation ID = new ResourceLocation("reiparticlesapi", "fire_class");
+    public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "fire_class");
 
     private ControllableParticleData templateData = new ControllableParticleData();
     private final Random random = new Random(System.currentTimeMillis());
diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java
index 4bb7608..b6de4c4 100644
--- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java
+++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java
@@ -26,7 +26,7 @@
  */
 public final class LightningClassParticleEmitters extends ClassParticleEmitters {
 
-    public static final ResourceLocation ID = new ResourceLocation("reiparticlesapi", "lightning_class");
+    public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "lightning_class");
 
     private ControllableParticleData templateData = new ControllableParticleData();
     private final Random random = new Random(System.currentTimeMillis());
diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java
index 60d5652..08d7884 100644
--- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java
+++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java
@@ -29,7 +29,7 @@
  */
 public final class PhysicsParticleEmitters extends ClassParticleEmitters {
 
-    public static final ResourceLocation ID = new ResourceLocation("reiparticlesapi", "physics_particle");
+    public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "physics_particle");
 
     private ControllableParticleData templateData = new ControllableParticleData();
     private final Random random = new Random(System.currentTimeMillis());
diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java
index 3bdd3e4..b331996 100644
--- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java
+++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java
@@ -26,7 +26,7 @@
  */
 public final class PresetLaserEmitters extends ClassParticleEmitters {
 
-    public static final ResourceLocation ID = new ResourceLocation("reiparticlesapi", "preset_laser");
+    public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "preset_laser");
 
     private ControllableParticleData templateData = new ControllableParticleData();
     private final Random random = new Random(System.currentTimeMillis());
diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java
index 047e714..2823782 100644
--- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java
+++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java
@@ -27,7 +27,7 @@
  */
 public final class PresetTestEmitters extends ClassParticleEmitters {
 
-    public static final ResourceLocation ID = new ResourceLocation("reiparticlesapi", "preset_test");
+    public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "preset_test");
 
     private ControllableParticleData templateData = new ControllableParticleData();
     private final Random random = new Random(System.currentTimeMillis());
diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java
index 6b06d78..5c33f00 100644
--- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java
+++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java
@@ -31,7 +31,7 @@
  */
 public final class SimpleParticleEmitters extends ClassParticleEmitters {
 
-    public static final ResourceLocation ID = new ResourceLocation("reiparticlesapi", "simple_particle");
+    public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "simple_particle");
 
     private ControllableParticleData templateData;
     private final Random random = new Random(System.currentTimeMillis());
diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleManager.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleManager.java
index a0f9249..989b72b 100644
--- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleManager.java
+++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleManager.java
@@ -24,6 +24,7 @@
 public final class ParticleStyleManager {
     private static final Map SERVER_VIEW_STYLES = new ConcurrentHashMap<>();
     private static final Map> VISIBLE = new ConcurrentHashMap<>();
+    private static final Map> STYLE_TO_PLAYERS = new ConcurrentHashMap<>();
     private static final Map CLIENT_VIEW_STYLES = new ConcurrentHashMap<>();
 
     private ParticleStyleManager() {
@@ -127,13 +128,8 @@ public static void doTickServer() {
     }
 
     private static Set filterVisiblePlayer(UUID styleId) {
-        Set result = new HashSet<>();
-        for (Map.Entry> entry : VISIBLE.entrySet()) {
-            if (entry.getValue().contains(styleId)) {
-                result.add(entry.getKey());
-            }
-        }
-        return result;
+        Set players = STYLE_TO_PLAYERS.get(styleId);
+        return players != null ? new HashSet<>(players) : new HashSet<>();
     }
 
     private static void upgradeVisible(ParticleGroupStyle style, ServerLevel level) {
@@ -170,6 +166,10 @@ private static boolean canViewStyle(ParticleGroupStyle style, ServerPlayer playe
     private static void removeStylePlayerView(ServerPlayer player, ParticleGroupStyle style) {
         Set visibleSet = VISIBLE.computeIfAbsent(player.getUUID(), ignored -> ConcurrentHashMap.newKeySet());
         visibleSet.remove(style.getUuid());
+        Set stylePlayers = STYLE_TO_PLAYERS.get(style.getUuid());
+        if (stylePlayers != null) {
+            stylePlayers.remove(player.getUUID());
+        }
         PacketParticleStyleS2C packet = new PacketParticleStyleS2C(style.getUuid(), ControlType.REMOVE, Map.of());
         ReiParticlesNetwork.sendTo(player, packet);
     }
@@ -179,6 +179,8 @@ private static void addStylePlayerView(ServerPlayer player, ParticleGroupStyle s
         if (!visibleSet.add(style.getUuid())) {
             return;
         }
+        STYLE_TO_PLAYERS.computeIfAbsent(style.getUuid(), ignored -> ConcurrentHashMap.newKeySet())
+                .add(player.getUUID());
         PacketParticleStyleS2C packet = buildCreatePacket(style, style.getPos());
         ReiParticlesNetwork.sendTo(player, packet);
     }
@@ -216,6 +218,7 @@ private static PacketParticleStyleS2C buildCreatePacket(ParticleGroupStyle style
 
     private static void removeAllPlayerView(ParticleGroupStyle style, ServerLevel level) {
         UUID styleId = style.getUuid();
+        STYLE_TO_PLAYERS.remove(styleId);
         for (Map.Entry> entry : VISIBLE.entrySet()) {
             UUID playerId = entry.getKey();
             Set visibleSet = entry.getValue();
@@ -236,6 +239,7 @@ private static void removeAllPlayerView(ParticleGroupStyle style, ServerLevel le
     private static void pruneDisconnectedPlayers() {
         if (SERVER_VIEW_STYLES.isEmpty()) {
             VISIBLE.clear();
+            STYLE_TO_PLAYERS.clear();
             return;
         }
         VISIBLE.entrySet().removeIf(entry -> {
@@ -247,6 +251,12 @@ private static void pruneDisconnectedPlayers() {
                     }
                 }
             }
+            for (UUID styleId : entry.getValue()) {
+                Set stylePlayers = STYLE_TO_PLAYERS.get(styleId);
+                if (stylePlayers != null) {
+                    stylePlayers.remove(playerId);
+                }
+            }
             return true;
         });
     }
diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java
index 22ec511..834db89 100644
--- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java
+++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java
@@ -576,11 +576,10 @@ private void addVertex(VertexConsumer consumer, Quaternionf q,
                            float tu, float tv,
                            float size, int light) {
         Vector3f pos = new Vector3f(vx, vy, 0.0f).rotate(q).mul(size).add(dx, dy, dz);
-        consumer.vertex(pos.x, pos.y, pos.z)
-                .uv(tu, tv)
-                .color(this.rCol, this.gCol, this.bCol, this.alpha)
-                .uv2(light)
-                .endVertex();
+        consumer.addVertex(pos.x, pos.y, pos.z)
+                .setUv(tu, tv)
+                .setColor(this.rCol, this.gCol, this.bCol, this.alpha)
+                .setLight(light);
     }
 
     // ---- Render type ----
diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java
index 2d6fc56..e534388 100644
--- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java
+++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java
@@ -3,14 +3,15 @@
 package com.reiasu.reiparticlesapi.particles;
 
 import com.reiasu.reiparticlesapi.particles.impl.*;
-import com.mojang.brigadier.StringReader;
-import net.minecraft.core.particles.ParticleOptions;
+import com.mojang.serialization.MapCodec;
+import io.netty.buffer.ByteBuf;
 import net.minecraft.core.particles.ParticleType;
-import net.minecraft.network.FriendlyByteBuf;
-import net.minecraftforge.eventbus.api.IEventBus;
-import net.minecraftforge.registries.DeferredRegister;
-import net.minecraftforge.registries.ForgeRegistries;
-import net.minecraftforge.registries.RegistryObject;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.network.RegistryFriendlyByteBuf;
+import net.minecraft.network.codec.StreamCodec;
+import net.neoforged.bus.api.IEventBus;
+import net.neoforged.neoforge.registries.DeferredHolder;
+import net.neoforged.neoforge.registries.DeferredRegister;
 
 import java.util.UUID;
 import java.util.function.BiFunction;
@@ -18,74 +19,79 @@
 /**
  * Registry for all ReiParticlesAPI custom particle types.
  * 

- * Forge port: uses {@link DeferredRegister} with custom {@link ParticleType} + * NeoForge port: uses {@link DeferredRegister} with custom {@link ParticleType} * instances that carry {@link ControllableParticleEffect} data (UUID + faceToPlayer). */ public final class ReiModParticles { public static final ReiModParticles INSTANCE = new ReiModParticles(); private static final DeferredRegister> PARTICLES = - DeferredRegister.create(ForgeRegistries.PARTICLE_TYPES, "reiparticlesapi"); + DeferredRegister.create(Registries.PARTICLE_TYPE, "reiparticlesapi"); - public static final RegistryObject> CONTROLLABLE_END_ROD = + public static final DeferredHolder, ParticleType> CONTROLLABLE_END_ROD = PARTICLES.register("controllable_end_rod", () -> createType(ControllableEndRodEffect::new)); - public static final RegistryObject> CONTROLLABLE_ENCHANTMENT = + public static final DeferredHolder, ParticleType> CONTROLLABLE_ENCHANTMENT = PARTICLES.register("controllable_enchantment", () -> createType(ControllableEnchantmentEffect::new)); - public static final RegistryObject> CONTROLLABLE_CLOUD = + public static final DeferredHolder, ParticleType> CONTROLLABLE_CLOUD = PARTICLES.register("controllable_cloud", () -> createType(ControllableCloudEffect::new)); - public static final RegistryObject> CONTROLLABLE_FLASH = + public static final DeferredHolder, ParticleType> CONTROLLABLE_FLASH = PARTICLES.register("controllable_flash", () -> createType(ControllableFlashEffect::new)); - public static final RegistryObject> CONTROLLABLE_FIREWORK = + public static final DeferredHolder, ParticleType> CONTROLLABLE_FIREWORK = PARTICLES.register("controllable_firework", () -> createType(ControllableFireworkEffect::new)); - public static final RegistryObject> CONTROLLABLE_FALLING_DUST = + public static final DeferredHolder, ParticleType> CONTROLLABLE_FALLING_DUST = PARTICLES.register("controllable_falling_dust", () -> createType((uuid, face) -> new ControllableFallingDustEffect( uuid, net.minecraft.world.level.block.Blocks.SAND.defaultBlockState(), face))); - public static final RegistryObject> CONTROLLABLE_SPLASH = + public static final DeferredHolder, ParticleType> CONTROLLABLE_SPLASH = PARTICLES.register("controllable_splash", () -> createType(ControllableSplashEffect::new)); private ReiModParticles() {} /** - * Creates a {@link ParticleType} with a deserializer that reads UUID + boolean - * from the network/command, matching all {@link ControllableParticleEffect} subtypes. + * Creates a {@link ParticleType} with MapCodec and StreamCodec for 1.21+. */ - @SuppressWarnings("deprecation") private static ParticleType createType( BiFunction factory) { - ParticleOptions.Deserializer deserializer = new ParticleOptions.Deserializer() { + MapCodec mapCodec = MapCodec.unit(() -> factory.apply(UUID.randomUUID(), false)); + StreamCodec streamCodec = new StreamCodec<>() { @Override - public T fromCommand(ParticleType type, StringReader reader) { - return factory.apply(UUID.randomUUID(), false); + public T decode(RegistryFriendlyByteBuf buf) { + return factory.apply(buf.readUUID(), buf.readBoolean()); } @Override - public T fromNetwork(ParticleType type, FriendlyByteBuf buf) { - return factory.apply(buf.readUUID(), buf.readBoolean()); + public void encode(RegistryFriendlyByteBuf buf, T value) { + buf.writeUUID(value.getControlUUID()); + buf.writeBoolean(value.getFaceToPlayer()); } }; - return new ParticleType(true, deserializer) { + return new ParticleType(true) { + @Override + public MapCodec codec() { + return mapCodec; + } + @Override - public com.mojang.serialization.Codec codec() { - return com.mojang.serialization.Codec.unit(() -> factory.apply(UUID.randomUUID(), false)); + public StreamCodec streamCodec() { + return streamCodec; } }; } /** - * Register the particle types with the Forge event bus. + * Register the particle types with the NeoForge event bus. * Call this during mod construction. */ public static void register(IEventBus modBus) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java index da3c8b5..a37bc33 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java @@ -6,6 +6,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.MeshData; import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.VertexFormat; import net.minecraft.client.particle.ParticleRenderType; @@ -19,7 +20,7 @@ public final class ReiParticleTextureSheet { */ public static final ParticleRenderType ADDITION_BLEND_TRANSLUCENT = new ParticleRenderType() { @Override - public void begin(BufferBuilder builder, TextureManager textureManager) { + public BufferBuilder begin(Tesselator tesselator, TextureManager textureManager) { RenderSystem.depthMask(false); RenderSystem.setShaderTexture(0, TextureAtlas.LOCATION_PARTICLES); RenderSystem.enableBlend(); @@ -27,17 +28,7 @@ public void begin(BufferBuilder builder, TextureManager textureManager) { GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE ); - builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.PARTICLE); - } - - @Override - public void end(Tesselator tesselator) { - tesselator.end(); - RenderSystem.blendFunc( - GlStateManager.SourceFactor.SRC_ALPHA, - GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA - ); - RenderSystem.depthMask(true); + return tesselator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.PARTICLE); } @Override diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableCloudEffect.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableCloudEffect.java index df05918..d4f6429 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableCloudEffect.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableCloudEffect.java @@ -5,8 +5,6 @@ import com.reiasu.reiparticlesapi.particles.ControllableParticleEffect; import com.reiasu.reiparticlesapi.particles.ReiModParticles; import net.minecraft.core.particles.ParticleType; -import net.minecraft.network.FriendlyByteBuf; - import java.util.UUID; public class ControllableCloudEffect implements ControllableParticleEffect { @@ -32,8 +30,4 @@ public ControllableCloudEffect clone() { } @Override public ParticleType getType() { return ReiModParticles.CONTROLLABLE_CLOUD.get(); } - @Override public void writeToNetwork(FriendlyByteBuf buf) { - buf.writeUUID(uuid); buf.writeBoolean(faceToPlayer); - } - @Override public String writeToString() { return "coo:cloud"; } } \ No newline at end of file diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEnchantmentEffect.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEnchantmentEffect.java index a950a50..e09a91f 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEnchantmentEffect.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEnchantmentEffect.java @@ -5,8 +5,6 @@ import com.reiasu.reiparticlesapi.particles.ControllableParticleEffect; import com.reiasu.reiparticlesapi.particles.ReiModParticles; import net.minecraft.core.particles.ParticleType; -import net.minecraft.network.FriendlyByteBuf; - import java.util.UUID; public class ControllableEnchantmentEffect implements ControllableParticleEffect { @@ -36,8 +34,4 @@ public ControllableEnchantmentEffect clone() { @Override public boolean getFaceToPlayer() { return faceToPlayer; } @Override public ParticleType getType() { return ReiModParticles.CONTROLLABLE_ENCHANTMENT.get(); } - @Override public void writeToNetwork(FriendlyByteBuf buf) { - buf.writeUUID(uuid); buf.writeBoolean(faceToPlayer); - } - @Override public String writeToString() { return "coo:enchantment"; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEndRodEffect.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEndRodEffect.java index 6dab47c..94aebe7 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEndRodEffect.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEndRodEffect.java @@ -5,8 +5,6 @@ import com.reiasu.reiparticlesapi.particles.ControllableParticleEffect; import com.reiasu.reiparticlesapi.particles.ReiModParticles; import net.minecraft.core.particles.ParticleType; -import net.minecraft.network.FriendlyByteBuf; - import java.util.UUID; public class ControllableEndRodEffect implements ControllableParticleEffect { @@ -36,8 +34,4 @@ public ControllableEndRodEffect clone() { @Override public boolean getFaceToPlayer() { return faceToPlayer; } @Override public ParticleType getType() { return ReiModParticles.CONTROLLABLE_END_ROD.get(); } - @Override public void writeToNetwork(FriendlyByteBuf buf) { - buf.writeUUID(uuid); buf.writeBoolean(faceToPlayer); - } - @Override public String writeToString() { return "coo:end_rod"; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFallingDustEffect.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFallingDustEffect.java index bdf60a5..37a3a23 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFallingDustEffect.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFallingDustEffect.java @@ -5,7 +5,6 @@ import com.reiasu.reiparticlesapi.particles.ControllableParticleEffect; import com.reiasu.reiparticlesapi.particles.ReiModParticles; import net.minecraft.core.particles.ParticleType; -import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; @@ -41,8 +40,4 @@ public ControllableFallingDustEffect clone() { @Override public boolean getFaceToPlayer() { return faceToPlayer; } @Override public ParticleType getType() { return ReiModParticles.CONTROLLABLE_FALLING_DUST.get(); } - @Override public void writeToNetwork(FriendlyByteBuf buf) { - buf.writeUUID(uuid); buf.writeBoolean(faceToPlayer); - } - @Override public String writeToString() { return "coo:falling_dust"; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFireworkEffect.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFireworkEffect.java index 6d0ca8c..a452f99 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFireworkEffect.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFireworkEffect.java @@ -5,8 +5,6 @@ import com.reiasu.reiparticlesapi.particles.ControllableParticleEffect; import com.reiasu.reiparticlesapi.particles.ReiModParticles; import net.minecraft.core.particles.ParticleType; -import net.minecraft.network.FriendlyByteBuf; - import java.util.UUID; public class ControllableFireworkEffect implements ControllableParticleEffect { @@ -36,8 +34,4 @@ public ControllableFireworkEffect clone() { @Override public boolean getFaceToPlayer() { return faceToPlayer; } @Override public ParticleType getType() { return ReiModParticles.CONTROLLABLE_FIREWORK.get(); } - @Override public void writeToNetwork(FriendlyByteBuf buf) { - buf.writeUUID(uuid); buf.writeBoolean(faceToPlayer); - } - @Override public String writeToString() { return "coo:firework"; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFlashEffect.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFlashEffect.java index e5f4675..38e0161 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFlashEffect.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFlashEffect.java @@ -5,8 +5,6 @@ import com.reiasu.reiparticlesapi.particles.ControllableParticleEffect; import com.reiasu.reiparticlesapi.particles.ReiModParticles; import net.minecraft.core.particles.ParticleType; -import net.minecraft.network.FriendlyByteBuf; - import java.util.UUID; public class ControllableFlashEffect implements ControllableParticleEffect { @@ -36,8 +34,4 @@ public ControllableFlashEffect clone() { @Override public boolean getFaceToPlayer() { return faceToPlayer; } @Override public ParticleType getType() { return ReiModParticles.CONTROLLABLE_FLASH.get(); } - @Override public void writeToNetwork(FriendlyByteBuf buf) { - buf.writeUUID(uuid); buf.writeBoolean(faceToPlayer); - } - @Override public String writeToString() { return "coo:flash"; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableSplashEffect.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableSplashEffect.java index caa0305..8c04933 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableSplashEffect.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableSplashEffect.java @@ -5,8 +5,6 @@ import com.reiasu.reiparticlesapi.particles.ControllableParticleEffect; import com.reiasu.reiparticlesapi.particles.ReiModParticles; import net.minecraft.core.particles.ParticleType; -import net.minecraft.network.FriendlyByteBuf; - import java.util.UUID; public class ControllableSplashEffect implements ControllableParticleEffect { @@ -36,8 +34,4 @@ public ControllableSplashEffect clone() { @Override public boolean getFaceToPlayer() { return faceToPlayer; } @Override public ParticleType getType() { return ReiModParticles.CONTROLLABLE_SPLASH.get(); } - @Override public void writeToNetwork(FriendlyByteBuf buf) { - buf.writeUUID(uuid); buf.writeBoolean(faceToPlayer); - } - @Override public String writeToString() { return "coo:splash"; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java index a1a37b8..446c622 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java @@ -40,7 +40,7 @@ public static double inverseLerp(double value, double min, double max) { } public static double smoothstep(double edge0, double edge1, double x) { - double t = Math3DUtil.clamp(inverseLerp(x, edge0, edge1), 0.0, 1.0); + double t = Math.clamp(inverseLerp(x, edge0, edge1), 0.0, 1.0); return t * t * (3.0 - 2.0 * t); } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java index e6773e2..0a26dfb 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ThreadLocalRandom; import org.joml.Vector3f; @@ -15,19 +16,15 @@ public static double length(double x, double y, double z) { return Math.sqrt(x * x + y * y + z * z); } - public static double clamp(double value, double min, double max) { - return Math.max(min, Math.min(max, value)); - } - public static double lerp(double from, double to, double alpha) { return from + (to - from) * alpha; } public static Vector3f colorOf(int r, int g, int b) { - int rr = (int) clamp(r, 0, 255); - int gg = (int) clamp(g, 0, 255); - int bb = (int) clamp(b, 0, 255); - return new Vector3f((float) rr / 255f, (float) gg / 255f, (float) bb / 255f); + return new Vector3f( + Math.clamp(r, 0, 255) / 255f, + Math.clamp(g, 0, 255) / 255f, + Math.clamp(b, 0, 255) / 255f); } /** @@ -94,7 +91,7 @@ public static List getLightningEffectPoints(RelativeLocation t List result = new ArrayList<>(); if (target == null || segments <= 0) return result; - java.util.Random rand = new java.util.Random(); + ThreadLocalRandom rand = ThreadLocalRandom.current(); double dx = target.getX() / segments; double dy = target.getY() / segments; double dz = target.getZ() / segments; @@ -199,7 +196,7 @@ public static void rotatePointsToPoint(List points, RelativeLo } double dot = fx * tx + fy * ty + fz * tz; - double angle = Math.acos(clamp(dot, -1.0, 1.0)); + double angle = Math.acos(Math.clamp(dot, -1.0, 1.0)); RelativeLocation rotAxis = new RelativeLocation(cx / crossLen, cy / crossLen, cz / crossLen); rotateAsAxis(points, rotAxis, angle); } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java index c6bac79..99451db 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java @@ -7,6 +7,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.function.Function; /** * Preset particle shapes for Roman numeral display (I through XII). @@ -177,25 +178,27 @@ public static double getRomaOffsetY(double scale) { return 0.25 * scale * 2.0; } + @SuppressWarnings("unchecked") + private static final Function>[] ROMA_GENERATORS = new Function[] { + (Function>) MathPresets::romaI, + (Function>) MathPresets::romaII, + (Function>) MathPresets::romaIII, + (Function>) MathPresets::romaIV, + (Function>) MathPresets::romaV, + (Function>) MathPresets::romaVI, + (Function>) MathPresets::romaVII, + (Function>) MathPresets::romaVIII, + (Function>) MathPresets::romaIX, + (Function>) MathPresets::romaX, + (Function>) MathPresets::romaXI, + (Function>) MathPresets::romaXII, + }; + public static List withRomaNumber(int i, double scale) { - if (i < 1 || i > 12) { - throw new IllegalArgumentException("Only supports Roman numerals 1-12"); - } - switch (i) { - case 1: return romaI(scale); - case 2: return romaII(scale); - case 3: return romaIII(scale); - case 4: return romaIV(scale); - case 5: return romaV(scale); - case 6: return romaVI(scale); - case 7: return romaVII(scale); - case 8: return romaVIII(scale); - case 9: return romaIX(scale); - case 10: return romaX(scale); - case 11: return romaXI(scale); - case 12: return romaXII(scale); - default: return new ArrayList<>(); + if (i < 1 || i > ROMA_GENERATORS.length) { + throw new IllegalArgumentException("Only supports Roman numerals 1-" + ROMA_GENERATORS.length); } + return ROMA_GENERATORS[i - 1].apply(scale); } private static void requireMinScale(double scale) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java index c3d9fbf..d2f7820 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java @@ -32,7 +32,7 @@ public static BlockHitResult collide(Vec3 currentPos, Vec3 velocity, Level world currentPos.add(velocity), ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, - null + (net.minecraft.world.entity.Entity) null ); return world.clip(context); } @@ -58,7 +58,7 @@ public static RelativeLocation applyDrag(RelativeLocation velocity, double dragF } public static RelativeLocation steer(RelativeLocation velocity, RelativeLocation desired, double blend) { - double clampedBlend = Math3DUtil.clamp(blend, 0.0, 1.0); + double clampedBlend = Math.clamp(blend, 0.0, 1.0); velocity.setX(Math3DUtil.lerp(velocity.getX(), desired.getX(), clampedBlend)); velocity.setY(Math3DUtil.lerp(velocity.getY(), desired.getY(), clampedBlend)); velocity.setZ(Math3DUtil.lerp(velocity.getZ(), desired.getZ(), clampedBlend)); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ServerCameraUtil.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ServerCameraUtil.java index 05fa30c..cc9012e 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ServerCameraUtil.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ServerCameraUtil.java @@ -14,16 +14,6 @@ public final class ServerCameraUtil { private ServerCameraUtil() { } - public static void sendShake(Object world, Object target, double range, double power, int durationTicks) { - if (!(world instanceof ServerLevel serverLevel)) { - throw new IllegalArgumentException("world must be ServerLevel"); - } - if (!(target instanceof Vec3 origin)) { - throw new IllegalArgumentException("target must be Vec3"); - } - sendShake(serverLevel, origin, range, power, durationTicks); - } - public static void sendShake(ServerLevel world, double power, int durationTicks) { Objects.requireNonNull(world, "world"); if (power <= 0) throw new IllegalArgumentException("power must be > 0"); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java index fe4b310..7b9cfb2 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java @@ -103,10 +103,10 @@ private double parseTerm() { x *= parsePower(); } else if (consume('/')) { double d = parsePower(); - x = (d == 0) ? 0 : x / d; + x = x / d; } else if (consume('%')) { double d = parsePower(); - x = (d == 0) ? 0 : x % d; + x = x % d; } else { return x; } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java index e364159..5057651 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java +++ b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java @@ -13,8 +13,8 @@ */ public final class Memo { private final Supplier supplier; - private T memo; - private boolean initialized; + private volatile T memo; + private volatile boolean initialized; public Memo(Supplier supplier) { this.supplier = supplier; @@ -26,8 +26,12 @@ public Supplier getSupplier() { public T get() { if (!initialized) { - memo = supplier.get(); - initialized = true; + synchronized (this) { + if (!initialized) { + memo = supplier.get(); + initialized = true; + } + } } return memo; } diff --git a/forge-port-api/src/main/resources/META-INF/mods.toml b/forge-port-api/src/main/resources/META-INF/neoforge.mods.toml similarity index 79% rename from forge-port-api/src/main/resources/META-INF/mods.toml rename to forge-port-api/src/main/resources/META-INF/neoforge.mods.toml index 3cd0d4e..3b704d7 100644 --- a/forge-port-api/src/main/resources/META-INF/mods.toml +++ b/forge-port-api/src/main/resources/META-INF/neoforge.mods.toml @@ -9,20 +9,20 @@ displayName="${mod_name}" displayTest="IGNORE_ALL_VERSION" authors="Reiasu" description=''' -ReiParticlesAPI runtime for Forge 1.20.x. +ReiParticlesAPI runtime for NeoForge 1.21.x. Includes animation, emitter, display and test lifecycle services used by ReiParticleSkill. ''' [[dependencies.${mod_id}]] -modId="forge" -mandatory=true -versionRange="${loader_version_range}" +modId="neoforge" +type="required" +versionRange="${neo_version_range}" ordering="NONE" side="BOTH" [[dependencies.${mod_id}]] modId="minecraft" -mandatory=true +type="required" versionRange="${minecraft_version_range}" ordering="NONE" side="BOTH" diff --git a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/ReiParticlesAPISchedulerTest.java b/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/ReiParticlesAPISchedulerTest.java index 6f03d10..f1a2076 100644 --- a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/ReiParticlesAPISchedulerTest.java +++ b/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/ReiParticlesAPISchedulerTest.java @@ -18,6 +18,7 @@ // SPDX-License-Identifier: LGPL-3.0-only package com.reiasu.reiparticlesapi; +import com.reiasu.reiparticlesapi.scheduler.ReiScheduler; import org.junit.jupiter.api.Test; import java.util.concurrent.atomic.AtomicBoolean; @@ -27,34 +28,34 @@ class ReiParticlesAPISchedulerTest { - private ReiParticlesAPI.Scheduler createScheduler() { - return new ReiParticlesAPI.Scheduler(); + private ReiScheduler scheduler() { + return ReiScheduler.INSTANCE; } @Test void shouldExecuteScheduledTask() { - ReiParticlesAPI.Scheduler scheduler = createScheduler(); + ReiScheduler scheduler = scheduler(); AtomicBoolean executed = new AtomicBoolean(false); scheduler.runTask(1, () -> executed.set(true)); - // tick 1: currentTick becomes 1, executionTick is 1 → should fire - scheduler.tick(); + // tick 1: currentTick becomes 1, delay is 1 → should fire + scheduler.doTick(); assertTrue(executed.get()); } @Test void shouldExecuteWhenTickIsZero() { - ReiParticlesAPI.Scheduler scheduler = createScheduler(); + ReiScheduler scheduler = scheduler(); AtomicBoolean executed = new AtomicBoolean(false); - // runTask(0) clamps to 1, so executionTick = 0 + 1 = 1 + // runTask(0) clamps to 1, so delay = 1 scheduler.runTask(0, () -> executed.set(true)); // Before tick: not yet executed assertFalse(executed.get()); // tick 1: should fire - scheduler.tick(); + scheduler.doTick(); assertTrue(executed.get()); } } diff --git a/forge-port/build.gradle b/forge-port/build.gradle index 8658105..4236441 100644 --- a/forge-port/build.gradle +++ b/forge-port/build.gradle @@ -2,7 +2,7 @@ plugins { id 'eclipse' id 'idea' id 'maven-publish' - id 'net.minecraftforge.gradle' version '[6.0.36,6.2)' + id 'net.neoforged.moddev' version '2.0.140' } version = mod_version @@ -14,78 +14,47 @@ base { java { toolchain { - languageVersion = JavaLanguageVersion.of(17) + languageVersion = JavaLanguageVersion.of(21) } } -// Merged dev output for the reiparticlesapi module. -// Combines API classes + resources into one directory so Forge discovers it as a mod. -def reiApiMergedDir = file("${buildDir}/reiapi-dev") - -// Source set whose output points to the merged dir. No actual compilation — -// the Sync task (prepareReiApiDev) populates reiApiMergedDir instead. -sourceSets { - reiapi { - java.srcDirs = [] - resources.srcDirs = [] - } -} -sourceSets.reiapi.output.resourcesDir = reiApiMergedDir - -minecraft { - mappings channel: 'official', version: minecraft_version +sourceSets.main.resources { srcDir 'src/generated/resources' } - copyIdeResources = true +neoForge { + version = neo_version runs { - configureEach { - workingDirectory project.file('run') - property 'forge.logging.markers', 'REGISTRIES' - property 'forge.logging.console.level', 'debug' - mods { - "${mod_id}" { - source sourceSets.main - } - reiparticlesapi { - source sourceSets.reiapi - } - } + client { + client() } - - client {} - server { - args '--nogui' + server() + programArgument '--nogui' } - data { - args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') + data() + programArguments.addAll '--mod', mod_id, '--all', + '--output', file('src/generated/resources/').absolutePath, + '--existing', file('src/main/resources/').absolutePath } } -} -sourceSets.main.resources { srcDir 'src/generated/resources' } + mods { + "${mod_id}" { + sourceSet(sourceSets.main) + } + } +} repositories { - maven { url = 'https://maven.minecraftforge.net' } + maven { url = 'https://maven.neoforged.net/releases' } mavenCentral() } -// Sync task: merge API classes + processed resources into a single directory for dev runtime -tasks.register('prepareReiApiDev', Sync) { - from '../forge-port-api/build/classes/java/main' - from '../forge-port-api/build/resources/main' - into reiApiMergedDir -} -['runClient', 'runServer', 'runData'].each { taskName -> - tasks.matching { it.name == taskName }.configureEach { dependsOn 'prepareReiApiDev' } -} - dependencies { - minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" // Resolved via composite build (see settings.gradle includeBuild) - compileOnly 'com.reiasu.reiparticlesapi:reiparticlesapi:1.0-SNAPSHOT-forge-port' - testImplementation 'com.reiasu.reiparticlesapi:reiparticlesapi:1.0-SNAPSHOT-forge-port' + compileOnly 'com.reiasu.reiparticlesapi:reiparticlesapi:1.0-SNAPSHOT-neoforge' + testImplementation 'com.reiasu.reiparticlesapi:reiparticlesapi:1.0-SNAPSHOT-neoforge' testImplementation platform('org.junit:junit-bom:5.11.4') testImplementation 'org.junit.jupiter:junit-jupiter' } @@ -100,11 +69,12 @@ processResources { mod_name : mod_name, mod_license : mod_license, mod_version : mod_version, + neo_version_range : neo_version_range, loader_version_range : loader_version_range, minecraft_version_range: minecraft_version_range ] inputs.properties replaceProperties - filesMatching(['META-INF/mods.toml']) { + filesMatching(['META-INF/neoforge.mods.toml']) { expand replaceProperties } } diff --git a/forge-port/gradle.properties b/forge-port/gradle.properties index 4cdeceb..9c386b8 100644 --- a/forge-port/gradle.properties +++ b/forge-port/gradle.properties @@ -1,3 +1,4 @@ +org.gradle.java.home=C:\\Program Files\\Microsoft\\jdk-21.0.10.7-hotspot org.gradle.jvmargs=-Xmx2G org.gradle.daemon=true org.gradle.parallel=true @@ -5,13 +6,14 @@ org.gradle.parallel=true mod_id=reiparticleskill mod_name=ReiParticleSkill mod_license=LGPL-3.0-only -mod_version=1.0-SNAPSHOT-forge-port +mod_version=1.0-SNAPSHOT-neoforge mod_group_id=com.reiasu.reiparticleskill -minecraft_version=1.20.1 -forge_version=47.2.0 -loader_version_range=[47,) -minecraft_version_range=[1.20.1,1.21) +minecraft_version=1.21.1 +neo_version=21.1.173 +neo_version_range=[21.1,) +loader_version_range=[4,) +minecraft_version_range=[1.21.1,1.22) org.gradle.java.installations.auto-download=true org.gradle.java.installations.auto-detect=true diff --git a/forge-port/settings.gradle b/forge-port/settings.gradle index 2ca17ed..7c25b31 100644 --- a/forge-port/settings.gradle +++ b/forge-port/settings.gradle @@ -1,7 +1,7 @@ pluginManagement { repositories { gradlePluginPortal() - maven { url = 'https://maven.minecraftforge.net' } + maven { url = 'https://maven.neoforged.net/releases' } mavenCentral() } } @@ -10,7 +10,7 @@ plugins { id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' } -rootProject.name = 'reiparticleskill-forge-port' +rootProject.name = 'reiparticleskill-neoforge' // Composite build: resolve forge-port-api from the sibling project instead of a pre-built jar. includeBuild('../forge-port-api') { diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/ReiParticleSkillForge.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/ReiParticleSkillForge.java index cfd6954..a287938 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/ReiParticleSkillForge.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/ReiParticleSkillForge.java @@ -18,14 +18,14 @@ import com.reiasu.reiparticleskill.sounds.SkillSoundEvents; import com.reiasu.reiparticleskill.config.SkillClientConfig; import com.mojang.logging.LogUtils; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.RegisterCommandsEvent; +import net.neoforged.neoforge.event.tick.ServerTickEvent; import org.slf4j.Logger; @Mod(ReiParticleSkillForge.MOD_ID) @@ -34,22 +34,19 @@ public final class ReiParticleSkillForge { private static final Logger LOGGER = LogUtils.getLogger(); private final EndRespawnStateBridge endRespawnBridge = new EndRespawnStateBridge(); - public ReiParticleSkillForge() { - var modBus = FMLJavaModLoadingContext.get().getModEventBus(); + public ReiParticleSkillForge(IEventBus modBus, ModContainer container) { SkillEntityTypes.register(modBus); SkillEnchantments.register(modBus); SkillSoundEvents.register(modBus); - ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, SkillClientConfig.SPEC); + container.registerConfig(ModConfig.Type.CLIENT, SkillClientConfig.SPEC); modBus.addListener((FMLClientSetupEvent event) -> onClientSetup()); - MinecraftForge.EVENT_BUS.addListener((RegisterCommandsEvent event) -> + NeoForge.EVENT_BUS.addListener((RegisterCommandsEvent event) -> onRegisterCommands(event.getDispatcher())); - MinecraftForge.EVENT_BUS.addListener((TickEvent.ServerTickEvent event) -> { - if (event.phase == TickEvent.Phase.END && event.getServer() != null) { - EndRespawnWatcher.tickServer(event.getServer(), endRespawnBridge, LOGGER); - ServerListener.onServerPostTick(event.getServer()); - } + NeoForge.EVENT_BUS.addListener((ServerTickEvent.Post event) -> { + EndRespawnWatcher.tickServer(event.getServer(), endRespawnBridge, LOGGER); + ServerListener.onServerPostTick(event.getServer()); }); ReiParticlesAPI.init(); @@ -58,7 +55,7 @@ public ReiParticleSkillForge() { registerRuntimePorts(); ReiParticlesAPI.INSTANCE.registerTest(); - LOGGER.info("ReiParticleSkill Forge runtime initialized"); + LOGGER.info("ReiParticleSkill NeoForge runtime initialized"); } private void onClientSetup() { diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/EndCrystalBeamSuppressor.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/EndCrystalBeamSuppressor.java index 34d62aa..ebfc1e6 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/EndCrystalBeamSuppressor.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/EndCrystalBeamSuppressor.java @@ -2,48 +2,23 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.client; -import com.reiasu.reiparticleskill.ReiParticleSkillForge; -import net.minecraft.client.Minecraft; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.boss.enderdragon.EndCrystal; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RenderLevelStageEvent; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.EventPriority; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - /** - * Suppresses the vanilla End Crystal beam rendering by clearing - * beamTarget at multiple points: both during client tick AND right - * before entity rendering. This eliminates flashing caused by - * server data sync restoring beamTarget between tick and render. + * Formerly suppressed End Crystal beam via brute-force event listeners + * (ClientTickEvent + RenderLevelStageEvent) that iterated all entities. + *

+ * Removed to reduce mod conflicts: the {@code @EventBusSubscriber} caused + * this class to always participate in the event chain regardless of config, + * and mutating entity state globally conflicted with other mods. + *

+ * Beam suppression is now handled solely by + * {@link com.reiasu.reiparticleskill.mixin.EndCrystalRendererMixin}, + * which uses a surgical {@code @Redirect} on {@code getBeamTarget()} and + * is gated by {@link com.reiasu.reiparticleskill.config.SkillClientConfig#isSuppressCrystalBeam()}. + * + * @deprecated No longer used. Will be removed in a future version. */ -@Mod.EventBusSubscriber(modid = ReiParticleSkillForge.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) +@Deprecated public final class EndCrystalBeamSuppressor { - private EndCrystalBeamSuppressor() { } - - @SubscribeEvent - public static void onClientTick(TickEvent.ClientTickEvent event) { - if (event.phase != TickEvent.Phase.END) return; - clearBeamTargets(); - } - - @SubscribeEvent(priority = EventPriority.HIGHEST) - public static void onRenderLevel(RenderLevelStageEvent event) { - if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_SKY) return; - clearBeamTargets(); - } - - private static void clearBeamTargets() { - Minecraft mc = Minecraft.getInstance(); - if (mc.level == null) return; - for (Entity entity : mc.level.entitiesForRendering()) { - if (entity instanceof EndCrystal crystal && crystal.getBeamTarget() != null) { - crystal.setBeamTarget(null); - } - } - } } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillClientRegistries.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillClientRegistries.java index 4ad567e..cdb51f7 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillClientRegistries.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillClientRegistries.java @@ -6,12 +6,12 @@ import com.reiasu.reiparticleskill.entities.SkillEntityTypes; import com.reiasu.reiparticleskill.entities.renderer.BarrageItemRenderer; import net.minecraft.world.entity.EntityType; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.EntityRenderersEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; +import net.neoforged.api.distmarker.Dist; +import com.reiasu.reiparticleskill.config.SkillClientConfig; +import net.neoforged.neoforge.client.event.EntityRenderersEvent; +import net.neoforged.bus.api.SubscribeEvent; -@Mod.EventBusSubscriber(modid = ReiParticleSkillForge.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) +@net.neoforged.fml.common.EventBusSubscriber(modid = ReiParticleSkillForge.MOD_ID, bus = net.neoforged.fml.common.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public final class SkillClientRegistries { private SkillClientRegistries() { } @@ -19,6 +19,8 @@ private SkillClientRegistries() { @SubscribeEvent public static void onRegisterRenderers(EntityRenderersEvent.RegisterRenderers event) { event.registerEntityRenderer(SkillEntityTypes.BARRAGE_ITEM.get(), BarrageItemRenderer::new); - event.registerEntityRenderer(EntityType.END_CRYSTAL, NoBeamEndCrystalRenderer::new); + if (SkillClientConfig.INSTANCE.isSuppressCrystalBeam()) { + event.registerEntityRenderer(EntityType.END_CRYSTAL, NoBeamEndCrystalRenderer::new); + } } } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyInputHandler.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyInputHandler.java index b1fa886..a517b16 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyInputHandler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyInputHandler.java @@ -10,13 +10,11 @@ import com.mojang.logging.LogUtils; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; import org.slf4j.Logger; -@Mod.EventBusSubscriber(modid = ReiParticleSkillForge.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) +@net.neoforged.fml.common.EventBusSubscriber(modid = ReiParticleSkillForge.MOD_ID, bus = net.neoforged.fml.common.EventBusSubscriber.Bus.GAME, value = Dist.CLIENT) public final class SkillKeyInputHandler { private static final Logger LOGGER = LogUtils.getLogger(); @@ -24,10 +22,7 @@ private SkillKeyInputHandler() { } @SubscribeEvent - public static void onClientTick(TickEvent.ClientTickEvent event) { - if (event.phase != TickEvent.Phase.END) { - return; - } + public static void onClientTick(net.neoforged.neoforge.client.event.ClientTickEvent.Post event) { Minecraft minecraft = Minecraft.getInstance(); if (minecraft.player == null || minecraft.screen != null) { return; @@ -43,7 +38,7 @@ public static void onClientTick(TickEvent.ClientTickEvent event) { private static void sendKeyAction(ResourceLocation keyId) { try { - ReiParticlesNetwork.CHANNEL.sendToServer(new PacketKeyActionC2S(keyId, KeyActionType.SINGLE_CLICK, 0, false)); + net.neoforged.neoforge.network.PacketDistributor.sendToServer(new PacketKeyActionC2S(keyId, KeyActionType.SINGLE_CLICK, 0, false)); } catch (Throwable t) { LOGGER.debug("Failed to send key action packet: {}", keyId, t); } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyMappings.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyMappings.java index 6b3d7dc..03caa78 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyMappings.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyMappings.java @@ -5,13 +5,12 @@ import com.reiasu.reiparticleskill.ReiParticleSkillForge; import com.mojang.blaze3d.platform.InputConstants; import net.minecraft.client.KeyMapping; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RegisterKeyMappingsEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; +import net.neoforged.bus.api.SubscribeEvent; import org.lwjgl.glfw.GLFW; -@Mod.EventBusSubscriber(modid = ReiParticleSkillForge.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) +@net.neoforged.fml.common.EventBusSubscriber(modid = ReiParticleSkillForge.MOD_ID, bus = net.neoforged.fml.common.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public final class SkillKeyMappings { public static final KeyMapping FORMATION_1 = new KeyMapping( "key.reiparticleskill.formation1", diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/config/SkillClientConfig.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/config/SkillClientConfig.java index 998ecf2..6b3b57e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/config/SkillClientConfig.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/config/SkillClientConfig.java @@ -2,24 +2,24 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.config; -import net.minecraftforge.common.ForgeConfigSpec; +import net.neoforged.neoforge.common.ModConfigSpec; import org.apache.commons.lang3.tuple.Pair; public final class SkillClientConfig { - public static final ForgeConfigSpec SPEC; + public static final ModConfigSpec SPEC; public static final SkillClientConfig INSTANCE; static { - Pair pair = - new ForgeConfigSpec.Builder().configure(SkillClientConfig::new); + Pair pair = + new ModConfigSpec.Builder().configure(SkillClientConfig::new); INSTANCE = pair.getLeft(); SPEC = pair.getRight(); } - private final ForgeConfigSpec.BooleanValue suppressCrystalBeam; + private final ModConfigSpec.BooleanValue suppressCrystalBeam; - private SkillClientConfig(ForgeConfigSpec.Builder builder) { + private SkillClientConfig(ModConfigSpec.Builder builder) { builder.push("rendering"); suppressCrystalBeam = builder diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/ReiParticleSkillDataGenerators.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/ReiParticleSkillDataGenerators.java index 44f6279..36365de 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/ReiParticleSkillDataGenerators.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/ReiParticleSkillDataGenerators.java @@ -4,11 +4,10 @@ import com.reiasu.reiparticleskill.ReiParticleSkillForge; import net.minecraft.data.PackOutput; -import net.minecraftforge.data.event.GatherDataEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.neoforge.data.event.GatherDataEvent; -@Mod.EventBusSubscriber(modid = ReiParticleSkillForge.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) +@net.neoforged.fml.common.EventBusSubscriber(modid = ReiParticleSkillForge.MOD_ID, bus = net.neoforged.fml.common.EventBusSubscriber.Bus.MOD) public final class ReiParticleSkillDataGenerators { private ReiParticleSkillDataGenerators() { } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/SkillLanguageProvider.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/SkillLanguageProvider.java index 6919f21..1b64db8 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/SkillLanguageProvider.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/SkillLanguageProvider.java @@ -4,7 +4,7 @@ import com.reiasu.reiparticleskill.ReiParticleSkillForge; import net.minecraft.data.PackOutput; -import net.minecraftforge.common.data.LanguageProvider; +import net.neoforged.neoforge.common.data.LanguageProvider; public final class SkillLanguageProvider extends LanguageProvider { private final String locale; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSwordFormation.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSwordFormation.java index a9a3104..547d8b8 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSwordFormation.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSwordFormation.java @@ -173,7 +173,7 @@ public void onDisplay() { private void playSwordSound() { Level level = getWorld(); - if (!(level instanceof ServerLevel serverLevel) || !SkillSoundEvents.SWORD_FORMATION.isPresent()) { + if (!(level instanceof ServerLevel serverLevel) || !SkillSoundEvents.SWORD_FORMATION.isBound()) { return; } Vec3 pos = getPos(); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SkillEnchantments.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SkillEnchantments.java index 288f102..743ad43 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SkillEnchantments.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SkillEnchantments.java @@ -3,32 +3,57 @@ package com.reiasu.reiparticleskill.enchantments; import com.reiasu.reiparticleskill.ReiParticleSkillForge; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.EnchantmentHelper; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.bus.api.IEventBus; +/** + * In MC 1.21+, enchantments are data-driven. + * The sword_light enchantment is defined in: + * {@code data/reiparticleskill/enchantment/sword_light.json} + */ public final class SkillEnchantments { - public static final DeferredRegister ENCHANTMENTS = - DeferredRegister.create(ForgeRegistries.ENCHANTMENTS, ReiParticleSkillForge.MOD_ID); - public static final RegistryObject SWORD_LIGHT = - ENCHANTMENTS.register("sword_light", SwordLightEnchantment::new); + public static final ResourceKey SWORD_LIGHT = + ResourceKey.create(Registries.ENCHANTMENT, + ResourceLocation.fromNamespaceAndPath(ReiParticleSkillForge.MOD_ID, "sword_light")); + + private static Holder cachedSwordLight; private SkillEnchantments() { } public static void register(IEventBus bus) { - ENCHANTMENTS.register(bus); + // No-op: enchantments are data-driven in 1.21+ } public static int getSwordLightLevel(ItemStack stack) { - if (stack == null || stack.isEmpty() || !SWORD_LIGHT.isPresent()) { + if (stack == null || stack.isEmpty()) { + return 0; + } + Holder holder = getSwordLightHolder(stack); + if (holder == null) { return 0; } - return EnchantmentHelper.getItemEnchantmentLevel(SWORD_LIGHT.get(), stack); + return EnchantmentHelper.getItemEnchantmentLevel(holder, stack); + } + + private static Holder getSwordLightHolder(ItemStack stack) { + if (cachedSwordLight != null) { + return cachedSwordLight; + } + // Walk the item's enchantments to find our key + for (Holder h : EnchantmentHelper.getEnchantmentsForCrafting(stack).keySet()) { + if (h.is(SWORD_LIGHT)) { + cachedSwordLight = h; + return h; + } + } + return null; } } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SwordLightEnchantment.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SwordLightEnchantment.java deleted file mode 100644 index 451de33..0000000 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SwordLightEnchantment.java +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticleskill.enchantments; - -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.SwordItem; -import net.minecraft.world.item.enchantment.Enchantment; -import net.minecraft.world.item.enchantment.EnchantmentCategory; - -public final class SwordLightEnchantment extends Enchantment { - public SwordLightEnchantment() { - super(Rarity.RARE, EnchantmentCategory.WEAPON, new EquipmentSlot[]{EquipmentSlot.MAINHAND}); - } - - @Override - public int getMinCost(int level) { - return 5 + (Math.max(1, level) - 1) * 6; - } - - @Override - public int getMaxCost(int level) { - return getMinCost(level) + 2; - } - - @Override - public int getMaxLevel() { - return 1; - } - - @Override - public boolean canEnchant(ItemStack stack) { - return stack.getItem() instanceof SwordItem; - } -} diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCenterEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCenterEmitter.java index 03e2dc4..2e440a8 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCenterEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCenterEmitter.java @@ -21,7 +21,7 @@ */ @ReiAutoRegister public final class ClientCenterEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "client_center"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "client_center"); private static final Vector3f MAIN_COLOR = new Vector3f(210f / 255f, 80f / 255f, 1.0f); private static final double TAU = Math.PI * 2.0; private static final int SCALE_TICKS = 24; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCloudRingEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCloudRingEmitter.java index d1ed8ca..49c1429 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCloudRingEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCloudRingEmitter.java @@ -19,7 +19,7 @@ */ @ReiAutoRegister public final class ClientCloudRingEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "client_cloud_ring"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "client_cloud_ring"); private static final Vector3f MAIN_COLOR = new Vector3f(210f / 255f, 80f / 255f, 1.0f); private static final double TAU = Math.PI * 2.0; private static final int SCALE_TICKS = 24; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientDustEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientDustEmitter.java index b61bd9e..76822af 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientDustEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientDustEmitter.java @@ -21,7 +21,7 @@ */ @ReiAutoRegister public final class ClientDustEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "client_dust"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "client_dust"); private static final Vector3f MAIN_COLOR = new Vector3f(210f / 255f, 80f / 255f, 1.0f); private static final double TAU = Math.PI * 2.0; private static final int SCALE_TICKS = 24; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientEnchantRingEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientEnchantRingEmitter.java index d5a61d0..338ca4e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientEnchantRingEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientEnchantRingEmitter.java @@ -20,7 +20,7 @@ */ @ReiAutoRegister public final class ClientEnchantRingEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "client_enchant_ring"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "client_enchant_ring"); private static final Vector3f MAIN_COLOR = new Vector3f(210f / 255f, 80f / 255f, 1.0f); private static final double TAU = Math.PI * 2.0; private static final int SCALE_TICKS = 24; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/BarrageItemEntity.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/BarrageItemEntity.java index 580d3b1..28d6d3f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/BarrageItemEntity.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/BarrageItemEntity.java @@ -3,8 +3,6 @@ package com.reiasu.reiparticleskill.entities; import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; @@ -14,7 +12,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.network.NetworkHooks; public class BarrageItemEntity extends Entity { private static final EntityDataAccessor DATA_ITEM = @@ -71,14 +68,16 @@ public void setBlock(boolean block) { } @Override - protected void defineSynchedData() { - getEntityData().define(DATA_ITEM, ItemStack.EMPTY); + protected void defineSynchedData(SynchedEntityData.Builder builder) { + builder.define(DATA_ITEM, ItemStack.EMPTY); } @Override protected void readAdditionalSaveData(CompoundTag tag) { if (tag.contains(TAG_ITEM)) { - setItem(ItemStack.of(tag.getCompound(TAG_ITEM))); + ItemStack.CODEC.parse(net.minecraft.nbt.NbtOps.INSTANCE, tag.getCompound(TAG_ITEM)) + .resultOrPartial(s -> {}) + .ifPresent(this::setItem); } roll = tag.getFloat(TAG_ROLL); scale = tag.getFloat(TAG_SCALE); @@ -87,7 +86,7 @@ protected void readAdditionalSaveData(CompoundTag tag) { @Override protected void addAdditionalSaveData(CompoundTag tag) { - tag.put(TAG_ITEM, getItem().save(new CompoundTag())); + tag.put(TAG_ITEM, getItem().save(level().registryAccess())); tag.putFloat(TAG_ROLL, roll); tag.putFloat(TAG_SCALE, scale); tag.putBoolean(TAG_BLOCK, block); @@ -102,8 +101,5 @@ public void tick() { } } - @Override - public Packet getAddEntityPacket() { - return NetworkHooks.getEntitySpawningPacket(this); - } + // getAddEntityPacket removed in 1.21 — NeoForge handles entity spawn packets automatically } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/SkillEntityTypes.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/SkillEntityTypes.java index 3698350..37cf5e3 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/SkillEntityTypes.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/SkillEntityTypes.java @@ -5,16 +5,16 @@ import com.reiasu.reiparticleskill.ReiParticleSkillForge; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.MobCategory; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.bus.api.IEventBus; +import net.minecraft.core.registries.Registries; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; public final class SkillEntityTypes { public static final DeferredRegister> ENTITIES = - DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, ReiParticleSkillForge.MOD_ID); + DeferredRegister.create(Registries.ENTITY_TYPE, ReiParticleSkillForge.MOD_ID); - public static final RegistryObject> BARRAGE_ITEM = + public static final DeferredHolder, EntityType> BARRAGE_ITEM = ENTITIES.register("barrage_item", () -> EntityType.Builder.of(BarrageItemEntity::new, MobCategory.MISC) .sized(0.4F, 0.4F) diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/keys/SkillKeys.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/keys/SkillKeys.java index 21b4978..2e5940e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/keys/SkillKeys.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/keys/SkillKeys.java @@ -13,6 +13,6 @@ private SkillKeys() { } public static ResourceLocation id(String path) { - return new ResourceLocation(ReiParticleSkillForge.MOD_ID, path); + return ResourceLocation.fromNamespaceAndPath(ReiParticleSkillForge.MOD_ID, path); } } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/KeyListener.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/KeyListener.java index 14dc05e..ca9d489 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/KeyListener.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/KeyListener.java @@ -14,12 +14,11 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; +import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; +import net.neoforged.bus.api.SubscribeEvent; @EventListener(modId = ReiParticleSkillForge.MOD_ID) -@Mod.EventBusSubscriber(modid = ReiParticleSkillForge.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE) +@net.neoforged.fml.common.EventBusSubscriber(modid = ReiParticleSkillForge.MOD_ID, bus = net.neoforged.fml.common.EventBusSubscriber.Bus.GAME) public final class KeyListener { private static final int USE_COOLDOWN_TICKS = 16; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/mixin/EndCrystalRendererMixin.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/mixin/EndCrystalRendererMixin.java index 9f47ee8..15fd66d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/mixin/EndCrystalRendererMixin.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/mixin/EndCrystalRendererMixin.java @@ -2,29 +2,33 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.mixin; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.reiasu.reiparticleskill.config.SkillClientConfig; import net.minecraft.client.renderer.entity.EndCrystalRenderer; import net.minecraft.core.BlockPos; import net.minecraft.world.entity.boss.enderdragon.EndCrystal; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; /** * Suppresses the vanilla End Crystal beam so the mod's custom * particle effects are not obscured by the bright white beam. + *

+ * Uses {@link WrapOperation} (MixinExtras) instead of {@code @Redirect} + * so that multiple mods can safely wrap the same {@code getBeamTarget()} call. */ @Mixin(EndCrystalRenderer.class) public abstract class EndCrystalRendererMixin { - @Redirect( + @WrapOperation( method = "render(Lnet/minecraft/world/entity/boss/enderdragon/EndCrystal;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/boss/enderdragon/EndCrystal;getBeamTarget()Lnet/minecraft/core/BlockPos;") ) - private BlockPos reiparticleskill$hideBeam(EndCrystal crystal) { - if (!SkillClientConfig.INSTANCE.isSuppressCrystalBeam()) { - return crystal.getBeamTarget(); + private BlockPos reiparticleskill$hideBeam(EndCrystal crystal, Operation original) { + if (SkillClientConfig.INSTANCE.isSuppressCrystalBeam()) { + return null; } - return null; + return original.call(crystal); } } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectEnderPowerEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectEnderPowerEmitter.java index 4c5ac76..6269f78 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectEnderPowerEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectEnderPowerEmitter.java @@ -30,7 +30,7 @@ * Server-side port of the Fabric original. */ public final class CollectEnderPowerEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "collect_ender_power"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "collect_ender_power"); private static final DustParticleOptions ENDER_COLOR = new DustParticleOptions(new Vector3f(0.45f, 0.15f, 0.75f), 0.5f); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectPillarsEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectPillarsEmitters.java index 4468af7..c00369a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectPillarsEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectPillarsEmitters.java @@ -33,7 +33,7 @@ */ @ReiAutoRegister public final class CollectPillarsEmitters extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "collect_pillars"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "collect_pillars"); private static final DustParticleOptions PILLAR_COLOR = new DustParticleOptions(new Vector3f(0.45f, 0.15f, 0.75f), 0.5f); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndBeamExplosionEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndBeamExplosionEmitter.java index 82d7645..6852747 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndBeamExplosionEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndBeamExplosionEmitter.java @@ -30,7 +30,7 @@ */ @ReiAutoRegister public final class EndBeamExplosionEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "end_beam_explosion"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "end_beam_explosion"); private static final DustParticleOptions EXPLOSION_COLOR = new DustParticleOptions(new Vector3f(0.45f, 0.15f, 0.75f), 0.55f); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndCrystalEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndCrystalEmitters.java index 2e6b7cc..8220c6a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndCrystalEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndCrystalEmitters.java @@ -29,7 +29,7 @@ */ @ReiAutoRegister public final class EndCrystalEmitters extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "end_crystal"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "end_crystal"); private static final DustParticleOptions CRYSTAL_COLOR = new DustParticleOptions(new Vector3f(0.45f, 0.15f, 0.75f), 0.5f); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndLightBeamEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndLightBeamEmitter.java index 7df1633..604c248 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndLightBeamEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndLightBeamEmitter.java @@ -24,7 +24,7 @@ */ @ReiAutoRegister public final class EndLightBeamEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "end_light_beam"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "end_light_beam"); private static final DustParticleOptions BEAM_COLOR = new DustParticleOptions(new Vector3f(210f / 255f, 80f / 255f, 1.0f), 0.6f); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/SummonExplosionEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/SummonExplosionEmitter.java index 2763547..c145d0f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/SummonExplosionEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/SummonExplosionEmitter.java @@ -17,7 +17,7 @@ * registered via ReiAutoRegister. Preserved for API compatibility. */ public final class SummonExplosionEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "summon_explosion"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "summon_explosion"); public SummonExplosionEmitter(Vec3 pos, Level world) { Vec3 spawn = pos == null ? Vec3.ZERO : pos; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/LightEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/LightEmitter.java index 8cd7767..6bb1b67 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/LightEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/LightEmitter.java @@ -26,7 +26,7 @@ */ @ReiAutoRegister public final class LightEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "light"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "light"); private static final DustParticleOptions BOLT_COLOR = new DustParticleOptions(new Vector3f(0.85f, 0.92f, 1.0f), 0.55f); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordAuraEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordAuraEmitters.java index 1ba2a99..954e217 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordAuraEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordAuraEmitters.java @@ -26,7 +26,7 @@ */ @ReiAutoRegister public final class SwordAuraEmitters extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "sword_aura"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "sword_aura"); private final RandomSource random = RandomSource.create(); private final List particles = new ArrayList<>(); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordExplosionEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordExplosionEmitters.java index 894054e..d2716ae 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordExplosionEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordExplosionEmitters.java @@ -27,7 +27,7 @@ */ @ReiAutoRegister public final class SwordExplosionEmitters extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "sword_explosion"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "sword_explosion"); private final RandomSource random = RandomSource.create(); private final List particles = new ArrayList<>(); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationEmitters.java index 12eaa53..55299d0 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationEmitters.java @@ -26,7 +26,7 @@ */ @ReiAutoRegister public final class SwordFormationEmitters extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "sword_formation"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "sword_formation"); private final RandomSource random = RandomSource.create(); private final List particles = new ArrayList<>(); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationExplosionEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationExplosionEmitter.java index d7f98ca..7983e0b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationExplosionEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationExplosionEmitter.java @@ -26,7 +26,7 @@ */ @ReiAutoRegister public final class SwordFormationExplosionEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "sword_formation_explosion"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "sword_formation_explosion"); private final RandomSource random = RandomSource.create(); private final List particles = new ArrayList<>(); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationWaveEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationWaveEmitter.java index c0740c1..8d16ab4 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationWaveEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationWaveEmitter.java @@ -26,7 +26,7 @@ */ @ReiAutoRegister public final class SwordFormationWaveEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "sword_formation_wave"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "sword_formation_wave"); private final RandomSource random = RandomSource.create(); private final List particles = new ArrayList<>(); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/ParticleGroupEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/ParticleGroupEmitter.java index f74847f..2dfd829 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/ParticleGroupEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/ParticleGroupEmitter.java @@ -18,7 +18,7 @@ @ReiAutoRegister public final class ParticleGroupEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "particle_group"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "particle_group"); private static final DustParticleOptions CORE_COLOR = new DustParticleOptions(new Vector3f(0.95f, 0.82f, 0.35f), 1.0f); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunBeamEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunBeamEmitter.java index 99d2f8d..20b45e4 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunBeamEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunBeamEmitter.java @@ -28,7 +28,7 @@ */ @ReiAutoRegister public final class RailgunBeamEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "railgun_beam"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "railgun_beam"); private static final DustParticleOptions BEAM_COLOR = new DustParticleOptions(new Vector3f(210f / 255f, 80f / 255f, 1.0f), 0.7f); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunExplosionEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunExplosionEmitter.java index bed6580..a127903 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunExplosionEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunExplosionEmitter.java @@ -26,7 +26,7 @@ */ @ReiAutoRegister public final class RailgunExplosionEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = new ResourceLocation("reiparticleskill", "railgun_explosion"); + public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "railgun_explosion"); private static final DustParticleOptions WAVE_COLOR = new DustParticleOptions(new Vector3f(210f / 255f, 80f / 255f, 1.0f), 0.65f); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/LargeMagicCircleStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/LargeMagicCircleStyle.java index 4128651..79a2a37 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/LargeMagicCircleStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/LargeMagicCircleStyle.java @@ -32,7 +32,7 @@ @ReiAutoRegister public final class LargeMagicCircleStyle extends ParticleGroupStyle { - public static final ResourceLocation REGISTRY_KEY = new ResourceLocation("reiparticleskill", "large_magic_circle_style"); + public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "large_magic_circle_style"); private static final DustParticleOptions PRIMARY_COLOR = new DustParticleOptions(new Vector3f(0.95f, 0.82f, 0.35f), 1.0f); private static final DustParticleOptions SECONDARY_COLOR = diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunBeamStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunBeamStyle.java index ca63a01..4c09901 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunBeamStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunBeamStyle.java @@ -34,7 +34,7 @@ */ @ReiAutoRegister public final class RailgunBeamStyle extends ParticleGroupStyle { - public static final ResourceLocation REGISTRY_KEY = new ResourceLocation("reiparticleskill", "railgun_beam_style"); + public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "railgun_beam_style"); private static final DustParticleOptions BEAM_COLOR = new DustParticleOptions(new Vector3f(210f / 255f, 80f / 255f, 1.0f), 0.75f); private static final DustParticleOptions GLOW_COLOR = diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunChargingRingStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunChargingRingStyle.java index 68765aa..394d8b9 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunChargingRingStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunChargingRingStyle.java @@ -33,7 +33,7 @@ */ @ReiAutoRegister public final class RailgunChargingRingStyle extends ParticleGroupStyle { - public static final ResourceLocation REGISTRY_KEY = new ResourceLocation("reiparticleskill", "railgun_charging_ring_style"); + public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "railgun_charging_ring_style"); private static final DustParticleOptions RING_COLOR = new DustParticleOptions(new Vector3f(210f / 255f, 80f / 255f, 1.0f), 0.6f); private static final DustParticleOptions GLYPH_COLOR = diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndCrystalStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndCrystalStyle.java index bea4b1b..e33420c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndCrystalStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndCrystalStyle.java @@ -34,7 +34,7 @@ */ @ReiAutoRegister public final class EndCrystalStyle extends ParticleGroupStyle { - public static final ResourceLocation REGISTRY_KEY = new ResourceLocation("reiparticleskill", "end_crystal_style"); + public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "end_crystal_style"); private static final DustParticleOptions CRYSTAL_COLOR = new DustParticleOptions(new Vector3f(210f / 255f, 80f / 255f, 1.0f), 0.55f); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndDustStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndDustStyle.java index 4b3bb94..3a33352 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndDustStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndDustStyle.java @@ -33,7 +33,7 @@ */ @ReiAutoRegister public final class EndDustStyle extends ParticleGroupStyle { - public static final ResourceLocation REGISTRY_KEY = new ResourceLocation("reiparticleskill", "end_dust_style"); + public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "end_dust_style"); private static final DustParticleOptions DUST_COLOR = new DustParticleOptions(new Vector3f(210f / 255f, 80f / 255f, 1.0f), 0.55f); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnCenterStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnCenterStyle.java index 92d1768..325ab62 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnCenterStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnCenterStyle.java @@ -35,7 +35,7 @@ */ @ReiAutoRegister public final class EnderRespawnCenterStyle extends ParticleGroupStyle { - public static final ResourceLocation REGISTRY_KEY = new ResourceLocation("reiparticleskill", "ender_respawn_center_style"); + public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "ender_respawn_center_style"); private static final DustParticleOptions CENTER_COLOR = new DustParticleOptions(new Vector3f(210f / 255f, 80f / 255f, 1.0f), 0.6f); private static final DustParticleOptions GLYPH_COLOR = diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveCloudStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveCloudStyle.java index 5f7c6c5..1f4a15b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveCloudStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveCloudStyle.java @@ -36,7 +36,7 @@ */ @ReiAutoRegister public final class EnderRespawnWaveCloudStyle extends ParticleGroupStyle { - public static final ResourceLocation REGISTRY_KEY = new ResourceLocation("reiparticleskill", "ender_respawn_wave_cloud_style"); + public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "ender_respawn_wave_cloud_style"); private static final DustParticleOptions CLOUD_COLOR = new DustParticleOptions(new Vector3f(210f / 255f, 80f / 255f, 1.0f), 0.5f); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveEnchantStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveEnchantStyle.java index 7a6ce97..cefcceb 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveEnchantStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveEnchantStyle.java @@ -36,7 +36,7 @@ */ @ReiAutoRegister public final class EnderRespawnWaveEnchantStyle extends ParticleGroupStyle { - public static final ResourceLocation REGISTRY_KEY = new ResourceLocation("reiparticleskill", "ender_respawn_wave_enchant_style"); + public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "ender_respawn_wave_enchant_style"); private static final DustParticleOptions ENCHANT_COLOR = new DustParticleOptions(new Vector3f(210f / 255f, 80f / 255f, 1.0f), 0.5f); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/sounds/SkillSoundEvents.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/sounds/SkillSoundEvents.java index 798ca7e..807db5e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/sounds/SkillSoundEvents.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/sounds/SkillSoundEvents.java @@ -5,18 +5,18 @@ import com.reiasu.reiparticleskill.ReiParticleSkillForge; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.bus.api.IEventBus; +import net.minecraft.core.registries.Registries; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; public final class SkillSoundEvents { public static final DeferredRegister SOUND_EVENTS = - DeferredRegister.create(ForgeRegistries.SOUND_EVENTS, ReiParticleSkillForge.MOD_ID); + DeferredRegister.create(Registries.SOUND_EVENT, ReiParticleSkillForge.MOD_ID); - public static final RegistryObject SWORD_FORMATION = + public static final DeferredHolder SWORD_FORMATION = SOUND_EVENTS.register("sword_formation", - () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ReiParticleSkillForge.MOD_ID, "sword_formation"))); + () -> SoundEvent.createVariableRangeEvent(ResourceLocation.fromNamespaceAndPath(ReiParticleSkillForge.MOD_ID, "sword_formation"))); private SkillSoundEvents() { } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/DragonRespawnStateUtil.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/DragonRespawnStateUtil.java index bbfe3f1..0c691f8 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/DragonRespawnStateUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/DragonRespawnStateUtil.java @@ -198,7 +198,7 @@ public void handleEnd() { .min(Comparator.comparingDouble(d -> d.position().distanceTo(summonPos))) .ifPresent(dragon -> { dragon.setInvulnerable(true); - ReiParticlesAPI.scheduler.runTask(20, () -> dragon.setInvulnerable(false)); + ReiParticlesAPI.reiScheduler().runTask(20, () -> dragon.setInvulnerable(false)); }); } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/SwordLightEnchantUtil.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/SwordLightEnchantUtil.java index d957e28..3188c8a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/SwordLightEnchantUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/SwordLightEnchantUtil.java @@ -113,7 +113,7 @@ private static double distanceToSegment(Vec3 point, Vec3 start, Vec3 end) { } private static void playFormationSound(ServerLevel level, Vec3 pos) { - if (level == null || pos == null || !SkillSoundEvents.SWORD_FORMATION.isPresent()) { + if (level == null || pos == null || !SkillSoundEvents.SWORD_FORMATION.isBound()) { return; } level.playSound( diff --git a/forge-port/src/main/resources/META-INF/mods.toml b/forge-port/src/main/resources/META-INF/neoforge.mods.toml similarity index 80% rename from forge-port/src/main/resources/META-INF/mods.toml rename to forge-port/src/main/resources/META-INF/neoforge.mods.toml index 0128c16..43c87ee 100644 --- a/forge-port/src/main/resources/META-INF/mods.toml +++ b/forge-port/src/main/resources/META-INF/neoforge.mods.toml @@ -9,31 +9,30 @@ displayName="${mod_name}" displayTest="IGNORE_ALL_VERSION" authors="Reiasu" description=''' -ReiParticleSkill gameplay module for Forge 1.20.x. +ReiParticleSkill gameplay module for NeoForge 1.21.x. End dragon respawn effects, display and railgun commands run through ReiParticlesAPI runtime. ''' [[dependencies.${mod_id}]] -modId="forge" -mandatory=true -versionRange="${loader_version_range}" +modId="neoforge" +type="required" +versionRange="${neo_version_range}" ordering="NONE" side="BOTH" [[dependencies.${mod_id}]] modId="minecraft" -mandatory=true +type="required" versionRange="${minecraft_version_range}" ordering="NONE" side="BOTH" [[dependencies.${mod_id}]] modId="reiparticlesapi" -mandatory=true +type="required" versionRange="[0,)" ordering="AFTER" side="BOTH" - [[mixins]] config="reiparticleskill.mixins.json" diff --git a/forge-port/src/main/resources/data/reiparticleskill/enchantment/sword_light.json b/forge-port/src/main/resources/data/reiparticleskill/enchantment/sword_light.json new file mode 100644 index 0000000..34240b2 --- /dev/null +++ b/forge-port/src/main/resources/data/reiparticleskill/enchantment/sword_light.json @@ -0,0 +1,21 @@ +{ + "description": { + "translate": "enchantment.reiparticleskill.sword_light" + }, + "exclusive_set": "#minecraft:exclusive_set/damage", + "supported_items": "#minecraft:enchantable/sword", + "weight": 2, + "max_level": 1, + "min_cost": { + "base": 5, + "per_level_above_first": 6 + }, + "max_cost": { + "base": 7, + "per_level_above_first": 6 + }, + "anvil_cost": 4, + "slots": [ + "mainhand" + ] +} diff --git a/forge-port/src/main/resources/reiparticleskill.mixins.json b/forge-port/src/main/resources/reiparticleskill.mixins.json index a374fa5..da2bd4b 100644 --- a/forge-port/src/main/resources/reiparticleskill.mixins.json +++ b/forge-port/src/main/resources/reiparticleskill.mixins.json @@ -1,13 +1,12 @@ { - "required": true, + "required": false, "minVersion": "0.8", "package": "com.reiasu.reiparticleskill.mixin", - "compatibilityLevel": "JAVA_17", - "refmap": "reiparticleskill.refmap.json", + "compatibilityLevel": "JAVA_21", "client": [ "EndCrystalRendererMixin" ], "injectors": { - "defaultRequire": 1 + "defaultRequire": 0 } } From ef7fc3b51d86f2177c3d23976f729ec44947104c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A3=A0=E6=B8=9A=E5=90=AC=E6=BD=AE?= Date: Tue, 24 Feb 2026 12:15:32 +0900 Subject: [PATCH 2/3] Merged everything into one jar, cleaned up the event system, and tidied the dragon respawn code --- ATTRIBUTION.md | 22 +- NOTICE | 35 +-- README.md | 57 +--- THIRD_PARTY_NOTICES.md | 59 +---- forge-port-api/README.md | 135 ---------- forge-port-api/build.gradle | 84 ------ forge-port-api/gradle.properties | 19 -- .../gradle/wrapper/gradle-wrapper.jar | Bin 46175 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 - forge-port-api/gradlew | 248 ------------------ forge-port-api/gradlew.bat | 93 ------- forge-port-api/settings.gradle | 13 - .../reiparticlesapi/ReiParticlesAPI.java | 145 ---------- .../annotations/CodecField.java | 25 -- .../reiparticlesapi/barrages/Barrage.java | 103 -------- .../display/ReiRenderTypesProvider.java | 17 -- .../extend/BlockPosExtendsKt.java | 24 -- .../network/animation/api/PathMotion.java | 38 --- .../network/particle/data/IntRangeDataKt.java | 33 --- .../particle/data/SerializableData.java | 29 -- .../emitters/ParticleDataFactory.java | 18 -- .../particle/emitters/PhysicConstant.java | 26 -- .../emitters/command/ParticleCommand.java | 21 -- .../environment/wind/WindDirection.java | 69 ----- .../emitters/event/ParticleEvent.java | 47 ---- .../emitters/event/ParticleEventHandler.java | 35 --- .../event/ParticleEventHandlerManager.java | 53 ---- .../emitters/type/EmittersShootType.java | 45 ---- .../particles/Controllable.java | 91 ------- .../particles/ParticleLerpInterpolator.java | 20 -- .../control/ControlParticleManager.java | 49 ---- .../ControllableParticleGroupProvider.java | 30 --- .../utils/GraphMathHelper.java | 79 ------ .../reiparticlesapi/utils/ReflectUtil.java | 66 ----- .../utils/api/ModelPartPointCollector.java | 35 --- .../emitters/LinearResistanceHelper.java | 26 -- .../resources/META-INF/neoforge.mods.toml | 28 -- forge-port-api/src/main/resources/pack.mcmeta | 6 - .../ReiParticlesAPISchedulerTest.java | 61 ----- .../reiparticlesapi/ReiParticlesAPITest.java | 41 --- .../animation/AnimateRuntimeTest.java | 97 ------- .../display/DisplayEntityManagerTest.java | 49 ---- .../event/ReiEventBusTest.java | 172 ------------ .../ParticleControllerDataBuffersTest.java | 74 ------ .../packet/CameraShakeS2CPacketTest.java | 44 ---- .../emitters/ParticleEmittersManagerTest.java | 63 ----- .../builder/PointsAndFourierBuilderTest.java | 55 ---- .../utils/helper/StyleHelperRuntimeTest.java | 86 ------ forge-port-api/wrapper-bootstrap.gradle | 4 - forge-port/build.gradle | 9 +- forge-port/settings.gradle | 7 +- .../reiparticlesapi/ReiParticlesAPI.java | 75 ++++++ .../reiparticlesapi/ReiParticlesAPIForge.java | 111 ++++---- .../ReiParticlesConstants.java | 3 - .../reiparticlesapi/animation/Animate.java | 18 -- .../animation/AnimateAction.java | 0 .../animation/AnimateManager.java | 0 .../animation/AnimateNode.java | 0 .../animation/timeline/AngleAnimator.java | 14 +- .../animation/timeline/Ease.java | 4 - .../animation/timeline/Eases.java | 19 +- .../animation/timeline/Timeline.java | 5 - .../annotations/CodecField.java | 14 + .../annotations/ReiAutoRegister.java | 4 - .../annotations/codec/BufferCodec.java | 24 +- .../annotations/codec/CodecHelper.java | 39 +-- .../handler/ParticleCompositionHelper.java | 40 +-- .../display/handle/DisplayEntityHelper.java | 29 +- .../handle/ParticleEmittersHelper.java | 29 +- .../annotations/events/EventHandler.java | 0 .../annotations/events/EventListener.java | 0 .../barrages/AbstractBarrage.java | 56 +--- .../reiparticlesapi/barrages/Barrage.java | 53 ++++ .../barrages/BarrageHitResult.java | 4 - .../barrages/BarrageManager.java | 4 - .../barrages/BarrageOption.java | 7 - .../reiparticlesapi/barrages/HitBox.java | 31 +-- .../client/CameraShakeClientState.java | 0 .../client/ClientTickEventForwarder.java | 9 +- .../reiparticlesapi/commands/APICommand.java | 15 +- .../reiparticlesapi/config/APIConfig.java | 6 - .../display/DebugDisplayEntity.java | 0 .../display/DisplayEntity.java | 18 +- .../display/DisplayEntityManager.java | 0 .../display/ReiRenderTypesProvider.java | 9 + .../reiparticlesapi/enums/DistType.java | 3 - .../event/ForgeEventForwarder.java | 24 +- .../reiparticlesapi/event/ReiEventBus.java | 31 +-- .../event/api/EventCancelable.java | 0 .../event/api/EventExecutor.java | 0 .../event/api/EventInterruptible.java | 0 .../event/api/EventPriority.java | 0 .../reiparticlesapi/event/api/ReiEvent.java | 4 +- .../event/events/client/ClientEvent.java | 0 .../events/client/ClientPostTickEvent.java | 0 .../events/client/ClientPreTickEvent.java | 0 .../event/events/entity/EntityEvent.java | 0 .../event/events/entity/EntityMoveEvent.java | 0 .../events/entity/EntityPostTickEvent.java | 0 .../events/entity/EntityPreMoveEvent.java | 0 .../entity/EntityPrePlaceBlockEvent.java | 0 .../events/entity/EntityPreTickEvent.java | 0 .../events/entity/LivingEntityEvent.java | 0 .../entity/player/PlayerBlockBreakEvent.java | 0 .../entity/player/PlayerDisconnectEvent.java | 0 .../events/entity/player/PlayerEvent.java | 0 .../entity/player/PlayerItemDestroyEvent.java | 0 .../entity/player/PlayerLoggedInEvent.java | 0 .../entity/player/ServerPlayerDeathEvent.java | 0 .../player/ServerPlayerRespawnEvent.java | 0 .../entity/projectile/ProjectileEvent.java | 0 .../event/events/key/KeyActionEvent.java | 0 .../event/events/key/KeyActionType.java | 0 .../particle/emitter/EmitterRemoveEvent.java | 0 .../particle/emitter/EmitterSpawnEvent.java | 0 .../event/events/server/ServerEvent.java | 0 .../events/server/ServerPostTickEvent.java | 0 .../events/server/ServerPreTickEvent.java | 0 .../event/events/world/WorldEvent.java | 0 .../world/client/ClientWorldChangeEvent.java | 0 .../client/ClientWorldPostTickEvent.java | 0 .../world/client/ClientWorldPreTickEvent.java | 0 .../world/client/ClientWorldRenderEvent.java | 0 .../exceptions/RenderPipeInputException.java | 3 - .../RenderPipeLinkerNotSetException.java | 3 - .../RenderPipeNotFoundException.java | 3 - .../RenderPipeOutputNotSetException.java | 3 - .../extend/BlockPosExtendsKt.java | 16 ++ .../extend/ItemStackExtendKt.java | 9 +- .../reiparticlesapi/extend/MathExtendsKt.java | 4 - .../reiparticlesapi/extend/Vec3ExtendsKt.java | 0 .../extend/Vec3iExtendsKt.java | 9 +- .../network/ReiParticlesNetwork.java | 2 +- .../network/animation/EmittersPathMotion.java | 4 - .../animation/LambdaParticlePathMotion.java | 13 +- .../network/animation/ParticlePathMotion.java | 5 - .../network/animation/PathMotionManager.java | 15 +- .../network/animation/StylePathMotion.java | 4 - .../animation/api/AbstractPathMotion.java | 11 +- .../network/animation/api/PathMotion.java | 21 ++ .../buffer/AbstractControllerBuffer.java | 0 .../buffer/BooleanControllerBuffer.java | 0 .../network/buffer/CharControllerBuffer.java | 3 - .../buffer/DoubleControllerBuffer.java | 0 .../network/buffer/EmptyControllerBuffer.java | 0 .../network/buffer/FloatControllerBuffer.java | 0 .../buffer/IntArrayControllerBuffer.java | 0 .../network/buffer/IntControllerBuffer.java | 0 .../buffer/LongArrayControllerBuffer.java | 0 .../network/buffer/LongControllerBuffer.java | 0 .../buffer/NestedBuffersControllerBuffer.java | 4 - .../buffer/ParticleControllerDataBuffer.java | 0 .../buffer/ParticleControllerDataBuffers.java | 0 .../RelativeLocationControllerBuffer.java | 0 .../network/buffer/ShortControllerBuffer.java | 0 .../buffer/StringControllerBuffer.java | 0 .../network/buffer/UUIDControllerBuffer.java | 0 .../network/buffer/Vec3dControllerBuffer.java | 0 .../network/packet/CameraShakeS2CPacket.java | 0 .../network/packet/PacketCameraShakeS2C.java | 0 .../packet/PacketDisplayEntityS2C.java | 0 .../network/packet/PacketKeyActionC2S.java | 0 .../packet/PacketParticleCompositionS2C.java | 0 .../packet/PacketParticleEmittersS2C.java | 0 .../packet/PacketParticleGroupS2C.java | 0 .../network/packet/PacketParticleS2C.java | 0 .../packet/PacketParticleStyleS2C.java | 0 .../network/packet/PacketRenderEntityS2C.java | 0 .../listener/ClientCameraShakeHandler.java | 0 .../ClientDisplayEntityPacketHandler.java | 0 .../ClientParticleCompositionHandler.java | 0 .../ClientParticleEmittersPacketHandler.java | 0 .../ClientParticleGroupPacketHandler.java | 0 .../listener/ClientParticlePacketHandler.java | 0 .../ClientParticleStylePacketHandler.java | 0 .../ClientRenderEntityPacketHandler.java | 0 .../listener/ServerKeyActionHandler.java | 3 +- .../SequencedServerParticleGroup.java | 4 - .../network/particle/ServerController.java | 6 +- .../network/particle/ServerParticleGroup.java | 31 --- .../particle/ServerParticleGroupManager.java | 14 +- .../composition/AutoParticleComposition.java | 4 - .../AutoSequencedParticleComposition.java | 18 +- .../particle/composition/CompositionData.java | 16 -- .../composition/ParticleComposition.java | 86 ++---- .../composition/ParticleShapeComposition.java | 2 +- .../SequencedParticleComposition.java | 60 ++--- .../SequencedParticleShapeComposition.java | 80 ++---- .../manager/ParticleCompositionManager.java | 0 .../particle/data/DoubleRangeData.java | 0 .../particle/data/DoubleRangeDataKt.java | 0 .../network/particle/data/FloatRangeData.java | 3 - .../particle/data/FloatRangeDataKt.java | 4 - .../network/particle/data/IntRangeData.java | 11 +- .../network/particle/data/IntRangeDataKt.java | 21 ++ .../network/particle/data/RangeData.java | 6 - .../particle/data/SerializableData.java | 12 + .../emitters/AutoParticleEmitters.java | 9 - .../particle/emitters/ClassEmitters.java | 60 +---- .../emitters/ClassParticleEmitters.java | 22 +- .../emitters/ControllableParticleData.java | 23 -- .../emitters/DebugParticleEmitters.java | 0 .../emitters/DebugRailgunEmitters.java | 0 .../emitters/DisplayableEmitterData.java | 7 - .../particle/emitters/EmitterRegistry.java | 16 +- .../emitters/ParticleDataFactory.java | 9 + .../particle/emitters/ParticleEmitters.java | 35 +-- .../emitters/ParticleEmittersManager.java | 75 +----- .../particle/emitters/PhysicConstant.java | 17 ++ .../emitters/SimpleRandomParticleData.java | 0 .../particle/emitters/command/OrbitMode.java | 3 - .../command/ParticleAttractionCommand.java | 4 - .../emitters/command/ParticleCommand.java | 12 + .../command/ParticleCommandQueue.java | 42 +-- .../command/ParticleDistortionCommand.java | 8 - .../emitters/command/ParticleDragCommand.java | 4 - .../command/ParticleFlowFieldCommand.java | 5 - .../command/ParticleGravityCommand.java | 3 - .../command/ParticleNoiseCommand.java | 8 - .../command/ParticleOrbitCommand.java | 4 - .../command/ParticleRotationForceCommand.java | 5 - .../command/ParticleVortexCommand.java | 4 - .../environment/wind/BallWindDirection.java | 4 - .../environment/wind/BoxWindDirection.java | 13 - .../environment/wind/GlobalWindDirection.java | 9 +- .../environment/wind/WindDirection.java | 31 +++ .../environment/wind/WindDirections.java | 43 +-- .../emitters/event/ParticleCollideEvent.java | 3 - .../emitters/event/ParticleEvent.java | 23 ++ .../emitters/event/ParticleEventHandler.java | 19 ++ .../event/ParticleEventHandlerManager.java | 33 +++ .../event/ParticleHitEntityEvent.java | 3 - .../emitters/event/ParticleOnGroundEvent.java | 3 - .../emitters/event/ParticleOnLiquidEvent.java | 3 - .../impl/DefendClassParticleEmitters.java | 4 - .../impl/ExampleClassParticleEmitters.java | 3 - .../impl/ExplodeClassParticleEmitters.java | 4 - .../impl/FireClassParticleEmitters.java | 4 - .../impl/LightningClassParticleEmitters.java | 4 - .../impl/PhysicsParticleEmitters.java | 7 - .../emitters/impl/PresetLaserEmitters.java | 4 - .../emitters/impl/PresetTestEmitters.java | 4 - .../emitters/impl/SimpleParticleEmitters.java | 13 +- .../emitters/type/BoxEmittersShootType.java | 9 - .../emitters/type/EmittersShootType.java | 16 ++ .../emitters/type/EmittersShootTypes.java | 30 +-- .../emitters/type/LineEmittersShootType.java | 4 - .../emitters/type/MathEmittersShootType.java | 34 +-- .../emitters/type/PointEmittersShootType.java | 4 - .../particle/style/ParticleGroupStyle.java | 106 +------- .../particle/style/ParticleShapeStyle.java | 16 -- .../particle/style/ParticleStyleManager.java | 0 .../particle/style/ParticleStyleProvider.java | 0 .../style/SequencedParticleShapeStyle.java | 17 -- .../style/SequencedParticleStyle.java | 38 +-- .../network/particle/style/StyleRegistry.java | 17 +- .../particle/util/ServerParticleUtil.java | 20 +- .../particles/Controllable.java | 53 ++++ .../particles/ControllableParticle.java | 67 +---- .../particles/ControllableParticleEffect.java | 9 - .../ControllableParticleEffectManager.java | 4 - .../particles/ParticleDisplayer.java | 47 +--- .../particles/ParticleLerpInterpolator.java | 9 + .../particles/ReiModParticles.java | 17 +- .../particles/ReiParticleTextureSheet.java | 6 +- .../control/ControlParticleManager.java | 30 +++ .../particles/control/ControlType.java | 0 .../particles/control/ParticleController.java | 34 +-- .../group/ClientParticleGroupManager.java | 13 +- .../group/ControllableParticleGroup.java | 74 +----- .../ControllableParticleGroupProvider.java | 16 ++ .../control/group/SequencedParticleGroup.java | 47 +--- .../impl/ControllableCloudEffect.java | 0 .../impl/ControllableEnchantmentEffect.java | 0 .../impl/ControllableEndRodEffect.java | 0 .../impl/ControllableFallingDustEffect.java | 0 .../impl/ControllableFireworkEffect.java | 0 .../impl/ControllableFlashEffect.java | 0 .../impl/ControllableSplashEffect.java | 0 .../particles/ControllableCloudParticle.java | 0 .../ControllableEnchantmentParticle.java | 0 .../particles/ControllableEndRodParticle.java | 0 .../ControllableFallingDustParticle.java | 0 .../ControllableFireworkParticle.java | 0 .../particles/ControllableFlashParticle.java | 0 .../particles/ControllableSplashParticle.java | 0 .../reflect/ReiAPIScanner.java | 38 +-- .../reflect/SimpleClassInfo.java | 16 +- .../renderer/RenderEntity.java | 13 - .../client/ClientRenderEntityManager.java | 11 +- .../server/ServerRenderEntityManager.java | 4 - .../scheduler/ReiScheduler.java | 10 +- .../reiparticlesapi/test/SimpleTestGroup.java | 0 .../test/SimpleTestGroupBuilder.java | 0 .../test/SimpleTestOption.java | 0 .../reiparticlesapi/test/TestManager.java | 0 .../reiparticlesapi/test/api/TestGroup.java | 0 .../test/api/TestGroupBuilder.java | 0 .../reiparticlesapi/test/api/TestOption.java | 0 .../reiparticlesapi/utils/CircularQueue.java | 4 - .../utils/ClientCameraUtil.java | 54 +--- .../utils/FourierPhotoUtil.java | 80 +----- .../utils/GraphMathHelper.java | 44 ++++ .../reiparticlesapi/utils/ImageUtil.java | 48 +--- .../utils/LinearLevelLerp.java | 4 - .../reiparticlesapi/utils/Math3DUtil.java | 44 +--- .../reiparticlesapi/utils/MathDataUtil.java | 3 - .../reiparticlesapi/utils/MathPresets.java | 4 - .../reiparticlesapi/utils/NoiseMode.java | 0 .../reiparticlesapi/utils/PhysicsUtil.java | 35 +-- .../reiparticlesapi/utils/ReflectUtil.java | 39 +++ .../utils/RelativeLocation.java | 0 .../reiparticlesapi/utils/RotationMatrix.java | 22 +- .../utils/ServerCameraUtil.java | 0 .../utils/api/ModelPartPointCollector.java | 17 ++ .../utils/builder/FourierSeriesBuilder.java | 0 .../utils/builder/ImagePointBuilder.java | 6 - .../utils/builder/PointsBuilder.java | 18 +- .../utils/builder/RGBImagePointBuilder.java | 7 - .../utils/helper/AlphaHelper.java | 21 +- .../utils/helper/BezierValueScaleHelper.java | 0 .../utils/helper/HelperUtil.java | 0 .../utils/helper/MovementDirectionHelper.java | 14 +- .../utils/helper/MovementTargetHelper.java | 14 +- .../utils/helper/ParticleHelper.java | 0 .../utils/helper/ProgressSequencedHelper.java | 29 +- .../utils/helper/ScaleHelper.java | 7 +- .../helper/SequencedAnimationHelper.java | 6 - .../SequencedCompositionAnimationHelper.java | 33 +-- .../utils/helper/StatusHelper.java | 0 .../helper/buffer/ControllableBuffer.java | 4 - .../buffer/ControllableBufferHelper.java | 16 +- .../emitters/LinearResistanceHelper.java | 11 + .../impl/GroupBezierValueScaleHelper.java | 7 - .../impl/GroupProgressSequencedHelper.java | 11 +- .../utils/helper/impl/GroupScaleHelper.java | 6 - .../helper/impl/ParticleAlphaHelper.java | 6 - .../utils/helper/impl/StyleAlphaHelper.java | 7 - .../impl/StyleBezierValueScaleHelper.java | 0 .../impl/StyleProgressSequencedHelper.java | 10 +- .../utils/helper/impl/StyleScaleHelper.java | 0 .../utils/helper/impl/StyleStatusHelper.java | 0 .../composition/CompositionAlphaHelper.java | 12 +- .../CompositionBezierScaleHelper.java | 9 +- .../composition/CompositionScaleHelper.java | 10 +- .../composition/CompositionStatusHelper.java | 6 - .../utils/interpolator/Interpolator.java | 3 - .../interpolator/data/InterpolatorData.java | 6 - .../interpolator/data/InterpolatorDouble.java | 6 +- .../interpolator/data/InterpolatorFloat.java | 6 +- .../data/InterpolatorRelativeLocation.java | 10 +- .../interpolator/data/InterpolatorVec3d.java | 10 +- .../data/InterpolatorVector3f.java | 10 +- .../emitters/LineEmitterInterpolator.java | 4 - .../particle/CircleParticleInterpolator.java | 18 +- .../particle/DirectParticleInterpolator.java | 4 - .../utils/math/ExpressionEvaluator.java | 23 -- .../utils/presets/FourierPresets.java | 24 +- .../reiparticlesapi/utils/storage/Memo.java | 7 - .../ReiParticleSkillForge.java | 18 +- .../client/EndCrystalBeamSuppressor.java | 15 -- .../client/NoBeamEndCrystalRenderer.java | 6 - .../enchantments/SkillEnchantments.java | 5 - .../end/respawn/ClientEmitterFactory.java | 5 - .../end/respawn/DragonGravityTracker.java | 4 - .../DragonRespawnAnimationDirector.java | 198 +------------- .../end/respawn/EndDragonFightHelper.java | 49 +++- .../end/respawn/EndRespawnWatcher.java | 6 +- .../end/respawn/PillarCrafter.java | 66 +++++ .../end/respawn/PillarPulseScheduler.java | 109 ++++++++ .../emitter/CollectEnderPowerEmitter.java | 14 +- .../emitter/EndBeamExplosionEmitter.java | 10 +- .../emitter/PillarFourierBeamEmitter.java | 12 +- .../runtime/emitter/ShockwaveWallEmitter.java | 19 -- .../emitter/client/ClientCenterEmitter.java | 97 +++---- .../client/ClientCloudRingEmitter.java | 36 +-- .../emitter/client/ClientDustEmitter.java | 45 ++-- .../client/ClientEnchantRingEmitter.java | 19 +- .../entities/BarrageItemEntity.java | 2 +- .../listener/KeyListener.java | 7 +- .../mixin/EndCrystalRendererMixin.java | 7 - .../reiparticleskill/particles/RangeData.java | 4 - .../emitters/p1/CollectEnderPowerEmitter.java | 8 +- .../emitters/p1/CollectPillarsEmitters.java | 12 +- .../emitters/p1/EndBeamExplosionEmitter.java | 4 - .../core/emitters/p1/EndCrystalEmitters.java | 13 +- .../core/emitters/p1/EndLightBeamEmitter.java | 5 - .../emitters/p1/SummonExplosionEmitter.java | 6 +- .../core/emitters/p2/LightEmitter.java | 4 - .../core/emitters/p2/SwordAuraEmitters.java | 4 - .../emitters/p2/SwordExplosionEmitters.java | 5 - .../p2/formation/SwordFormationEmitters.java | 4 - .../SwordFormationExplosionEmitter.java | 4 - .../formation/SwordFormationWaveEmitter.java | 4 - .../display/emitter/RailgunBeamEmitter.java | 4 - .../emitter/RailgunExplosionEmitter.java | 4 - .../particles/preview/display/Formation.java | 4 - .../preview/display/RailgunBeamStyle.java | 5 - .../display/RailgunChargingRingStyle.java | 4 - .../preview/styles/EndCrystalStyle.java | 5 - .../preview/styles/EndDustStyle.java | 9 +- .../styles/EnderRespawnCenterStyle.java | 6 - .../styles/EnderRespawnWaveCloudStyle.java | 9 +- .../styles/EnderRespawnWaveEnchantStyle.java | 9 +- .../register/RuntimePortAutoRegistrar.java | 14 - .../test/SkillTestBuilder.java | 4 - .../util/ClientParticleHelper.java | 11 - .../util/DragonRespawnStateUtil.java | 51 +--- .../reiparticleskill/util/ParticleHelper.java | 20 +- .../util/geom/GraphMathHelper.java | 10 +- .../util/geom/Math3DUtil.java | 14 +- .../util/geom/PhysicsUtil.java | 10 +- .../util/geom/PointsBuilder.java | 9 - .../resources/META-INF/neoforge.mods.toml | 30 ++- .../particles/controllable_cloud.json | 0 .../particles/controllable_enchantment.json | 0 .../particles/controllable_end_rod.json | 0 .../particles/controllable_falling_dust.json | 0 .../particles/controllable_firework.json | 0 .../particles/controllable_flash.json | 0 .../particles/controllable_splash.json | 0 forge-port/src/main/resources/pack.mcmeta | 2 +- .../core/particles/ParticleType.java | 21 ++ 423 files changed, 1454 insertions(+), 5771 deletions(-) delete mode 100644 forge-port-api/README.md delete mode 100644 forge-port-api/build.gradle delete mode 100644 forge-port-api/gradle.properties delete mode 100644 forge-port-api/gradle/wrapper/gradle-wrapper.jar delete mode 100644 forge-port-api/gradle/wrapper/gradle-wrapper.properties delete mode 100755 forge-port-api/gradlew delete mode 100644 forge-port-api/gradlew.bat delete mode 100644 forge-port-api/settings.gradle delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/CodecField.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/Barrage.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/display/ReiRenderTypesProvider.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/BlockPosExtendsKt.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/PathMotion.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeDataKt.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/SerializableData.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleDataFactory.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/PhysicConstant.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommand.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirection.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEvent.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandler.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandlerManager.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootType.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/Controllable.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleLerpInterpolator.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlParticleManager.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroupProvider.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ReflectUtil.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/api/ModelPartPointCollector.java delete mode 100644 forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/emitters/LinearResistanceHelper.java delete mode 100644 forge-port-api/src/main/resources/META-INF/neoforge.mods.toml delete mode 100644 forge-port-api/src/main/resources/pack.mcmeta delete mode 100644 forge-port-api/src/test/java/com/reiasu/reiparticlesapi/ReiParticlesAPISchedulerTest.java delete mode 100644 forge-port-api/src/test/java/com/reiasu/reiparticlesapi/ReiParticlesAPITest.java delete mode 100644 forge-port-api/src/test/java/com/reiasu/reiparticlesapi/animation/AnimateRuntimeTest.java delete mode 100644 forge-port-api/src/test/java/com/reiasu/reiparticlesapi/display/DisplayEntityManagerTest.java delete mode 100644 forge-port-api/src/test/java/com/reiasu/reiparticlesapi/event/ReiEventBusTest.java delete mode 100644 forge-port-api/src/test/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffersTest.java delete mode 100644 forge-port-api/src/test/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacketTest.java delete mode 100644 forge-port-api/src/test/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManagerTest.java delete mode 100644 forge-port-api/src/test/java/com/reiasu/reiparticlesapi/utils/builder/PointsAndFourierBuilderTest.java delete mode 100644 forge-port-api/src/test/java/com/reiasu/reiparticlesapi/utils/helper/StyleHelperRuntimeTest.java delete mode 100644 forge-port-api/wrapper-bootstrap.gradle create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java (59%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesConstants.java (89%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/animation/Animate.java (79%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateAction.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateManager.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateNode.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/AngleAnimator.java (83%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Ease.java (60%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Eases.java (88%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Timeline.java (77%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/CodecField.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/annotations/ReiAutoRegister.java (69%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/BufferCodec.java (52%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java (86%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/annotations/composition/handler/ParticleCompositionHelper.java (70%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/annotations/display/handle/DisplayEntityHelper.java (72%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/annotations/emitter/handle/ParticleEmittersHelper.java (77%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventHandler.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventListener.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/barrages/AbstractBarrage.java (84%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/Barrage.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageHitResult.java (88%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageManager.java (92%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageOption.java (93%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/barrages/HitBox.java (79%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/client/CameraShakeClientState.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/client/ClientTickEventForwarder.java (72%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/commands/APICommand.java (67%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java (94%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/display/DebugDisplayEntity.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntity.java (57%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntityManager.java (100%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/display/ReiRenderTypesProvider.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/enums/DistType.java (80%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java (80%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/ReiEventBus.java (83%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/api/EventCancelable.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/api/EventExecutor.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/api/EventInterruptible.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/api/EventPriority.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/api/ReiEvent.java (59%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPostTickEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPreTickEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityMoveEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPostTickEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreMoveEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPrePlaceBlockEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreTickEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/LivingEntityEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerBlockBreakEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerDisconnectEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerItemDestroyEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerLoggedInEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerDeathEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerRespawnEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/projectile/ProjectileEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionType.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterRemoveEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterSpawnEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPostTickEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPreTickEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/world/WorldEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldChangeEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPostTickEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPreTickEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldRenderEvent.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeInputException.java (81%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeLinkerNotSetException.java (88%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeNotFoundException.java (90%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeOutputNotSetException.java (83%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/BlockPosExtendsKt.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/extend/ItemStackExtendKt.java (53%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/extend/MathExtendsKt.java (84%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3ExtendsKt.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3iExtendsKt.java (52%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java (97%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/animation/EmittersPathMotion.java (85%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/animation/LambdaParticlePathMotion.java (54%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/animation/ParticlePathMotion.java (84%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/animation/PathMotionManager.java (70%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/animation/StylePathMotion.java (84%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/AbstractPathMotion.java (68%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/PathMotion.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/AbstractControllerBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/BooleanControllerBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java (94%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/DoubleControllerBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/EmptyControllerBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/FloatControllerBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntArrayControllerBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntControllerBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongArrayControllerBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongControllerBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java (94%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffers.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/RelativeLocationControllerBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ShortControllerBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/StringControllerBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/UUIDControllerBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/buffer/Vec3dControllerBuffer.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacket.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketCameraShakeS2C.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketDisplayEntityS2C.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketKeyActionC2S.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleCompositionS2C.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleEmittersS2C.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleGroupS2C.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleS2C.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleStyleS2C.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketRenderEntityS2C.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientCameraShakeHandler.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientDisplayEntityPacketHandler.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleCompositionHandler.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleEmittersPacketHandler.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleGroupPacketHandler.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticlePacketHandler.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleStylePacketHandler.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientRenderEntityPacketHandler.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/packet/server/listener/ServerKeyActionHandler.java (88%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/SequencedServerParticleGroup.java (97%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerController.java (67%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java (94%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroupManager.java (94%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoParticleComposition.java (81%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoSequencedParticleComposition.java (52%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/CompositionData.java (74%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleComposition.java (71%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleShapeComposition.java (97%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleComposition.java (71%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleShapeComposition.java (66%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/manager/ParticleCompositionManager.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeData.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeDataKt.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeData.java (91%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeDataKt.java (83%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeData.java (56%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeDataKt.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/RangeData.java (77%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/SerializableData.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/AutoParticleEmitters.java (73%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassEmitters.java (88%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassParticleEmitters.java (85%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ControllableParticleData.java (92%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugParticleEmitters.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugRailgunEmitters.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DisplayableEmitterData.java (69%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/EmitterRegistry.java (73%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleDataFactory.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java (81%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManager.java (79%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/PhysicConstant.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/SimpleRandomParticleData.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/OrbitMode.java (83%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleAttractionCommand.java (94%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommand.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommandQueue.java (62%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDistortionCommand.java (97%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDragCommand.java (93%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleFlowFieldCommand.java (93%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleGravityCommand.java (92%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleNoiseCommand.java (95%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleOrbitCommand.java (96%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleRotationForceCommand.java (93%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleVortexCommand.java (96%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BallWindDirection.java (95%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BoxWindDirection.java (86%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/GlobalWindDirection.java (86%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirection.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirections.java (54%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleCollideEvent.java (94%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEvent.java create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandler.java create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandlerManager.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleHitEntityEvent.java (95%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnGroundEvent.java (96%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnLiquidEvent.java (95%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java (96%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java (97%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java (96%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java (96%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java (95%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java (96%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java (97%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java (97%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java (94%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/BoxEmittersShootType.java (81%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootType.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootTypes.java (60%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/LineEmittersShootType.java (86%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/MathEmittersShootType.java (82%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/PointEmittersShootType.java (88%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleGroupStyle.java (82%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleShapeStyle.java (95%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleManager.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleProvider.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleShapeStyle.java (95%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleStyle.java (94%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/StyleRegistry.java (72%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/network/particle/util/ServerParticleUtil.java (75%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/Controllable.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java (90%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffect.java (51%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffectManager.java (92%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleDisplayer.java (80%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleLerpInterpolator.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java (86%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java (85%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlParticleManager.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlType.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/control/ParticleController.java (79%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ClientParticleGroupManager.java (84%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroup.java (87%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroupProvider.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/SequencedParticleGroup.java (92%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableCloudEffect.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEnchantmentEffect.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEndRodEffect.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFallingDustEffect.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFireworkEffect.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFlashEffect.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableSplashEffect.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableCloudParticle.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEnchantmentParticle.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEndRodParticle.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFallingDustParticle.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFireworkParticle.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFlashParticle.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableSplashParticle.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/reflect/ReiAPIScanner.java (71%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/reflect/SimpleClassInfo.java (55%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/renderer/RenderEntity.java (94%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/renderer/client/ClientRenderEntityManager.java (83%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/renderer/server/ServerRenderEntityManager.java (96%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/scheduler/ReiScheduler.java (93%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroup.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroupBuilder.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestOption.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/test/TestManager.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroup.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroupBuilder.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/test/api/TestOption.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/CircularQueue.java (93%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/ClientCameraUtil.java (70%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/FourierPhotoUtil.java (87%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/ImageUtil.java (65%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/LinearLevelLerp.java (93%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java (80%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/MathDataUtil.java (94%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java (98%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/NoiseMode.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java (57%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ReflectUtil.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/RelativeLocation.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/RotationMatrix.java (63%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/ServerCameraUtil.java (100%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/api/ModelPartPointCollector.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/builder/FourierSeriesBuilder.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/builder/ImagePointBuilder.java (88%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/builder/PointsBuilder.java (91%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/builder/RGBImagePointBuilder.java (88%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/AlphaHelper.java (85%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/BezierValueScaleHelper.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/HelperUtil.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementDirectionHelper.java (80%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementTargetHelper.java (77%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ParticleHelper.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ProgressSequencedHelper.java (82%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ScaleHelper.java (92%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedAnimationHelper.java (91%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedCompositionAnimationHelper.java (63%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/StatusHelper.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBuffer.java (69%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBufferHelper.java (82%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/emitters/LinearResistanceHelper.java rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupBezierValueScaleHelper.java (86%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupProgressSequencedHelper.java (85%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupScaleHelper.java (86%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/ParticleAlphaHelper.java (88%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleAlphaHelper.java (86%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleBezierValueScaleHelper.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleProgressSequencedHelper.java (84%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleScaleHelper.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleStatusHelper.java (100%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionAlphaHelper.java (75%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionBezierScaleHelper.java (86%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionScaleHelper.java (82%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionStatusHelper.java (84%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/Interpolator.java (85%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorData.java (62%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorDouble.java (94%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorFloat.java (94%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorRelativeLocation.java (80%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVec3d.java (80%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVector3f.java (79%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/emitters/LineEmitterInterpolator.java (94%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/CircleParticleInterpolator.java (90%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/DirectParticleInterpolator.java (93%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java (90%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/presets/FourierPresets.java (77%) rename {forge-port-api => forge-port}/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java (82%) create mode 100644 forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarCrafter.java create mode 100644 forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarPulseScheduler.java rename {forge-port-api => forge-port}/src/main/resources/assets/reiparticlesapi/particles/controllable_cloud.json (100%) rename {forge-port-api => forge-port}/src/main/resources/assets/reiparticlesapi/particles/controllable_enchantment.json (100%) rename {forge-port-api => forge-port}/src/main/resources/assets/reiparticlesapi/particles/controllable_end_rod.json (100%) rename {forge-port-api => forge-port}/src/main/resources/assets/reiparticlesapi/particles/controllable_falling_dust.json (100%) rename {forge-port-api => forge-port}/src/main/resources/assets/reiparticlesapi/particles/controllable_firework.json (100%) rename {forge-port-api => forge-port}/src/main/resources/assets/reiparticlesapi/particles/controllable_flash.json (100%) rename {forge-port-api => forge-port}/src/main/resources/assets/reiparticlesapi/particles/controllable_splash.json (100%) create mode 100644 net/minecraft/core/particles/ParticleType.java diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index c4e3722..326937f 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -1,22 +1,8 @@ # Attribution -## Author +Author: Reiasu -- **Reiasu** — original author and maintainer +Some of the particle math uses rhodonea curves and Lissajous figures. +Dragon respawn timing is based on vanilla's `DragonRespawnAnimation`. -## Algorithms & Inspirations - -- **Rhodonea (rose) curves** — parametric polar curves `r = cos(kθ)` used in - center particle patterns (`ClientCenterEmitter`). -- **Lissajous figures** — `x = A sin(at + δ), y = B sin(bt)` used for - oscillating particle trails. -- **Ender Dragon respawn sequence** — timing constants derived from vanilla - Minecraft's `DragonRespawnAnimation` state machine (Mojang Studios). - -## Third-Party Libraries - -See `THIRD_PARTY_NOTICES.md` for full license texts of bundled/runtime dependencies. - -## License - -This project is licensed under LGPL-3.0-only. See `LICENSE` and `NOTICE` for details. +License: LGPL-3.0-only (see `LICENSE`) diff --git a/NOTICE b/NOTICE index c72874a..4347f8b 100644 --- a/NOTICE +++ b/NOTICE @@ -1,33 +1,10 @@ -Project: ReiParticleSkill Forge Workspace -SPDX-License-Identifier: LGPL-3.0-only - +ReiParticleSkill Copyright (C) 2025 Reiasu -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, version 3 of the License only (LGPL-3.0-only). -No "or later version" clause applies. - -Note: This project is licensed solely under LGPL-3.0-only. The LGPL-3.0 text -incorporates GPLv3 conditions by reference, so the GPL-3.0 full text is -included in LICENSES/ for ease of review — not as a separate grant of rights. -See LICENSES/LGPL-3.0.txt and LICENSES/GPL-3.0.txt. - -Modules: -1. ReiParticleSkill - Forge 1.20.1 particle effects mod -2. ReiParticlesAPI - Particle system API - -License scope: -- All files in this project, including source code, build scripts, and - audio/visual assets, are licensed under LGPL-3.0-only. +Licensed under LGPL-3.0-only. +See LICENSE and LICENSES/ for full text. -Source code availability: -- If you redistribute the binary (jar), you must also make the corresponding - source code available (e.g., by providing the repository URL + version tag, - or otherwise as described in the LGPL-3.0). -- Source: https://github.com/reiasu2/ReiParticleSkill - For release builds, use the matching version tag (e.g., /tree/v1.0). +Source: https://github.com/reiasu2/ReiParticleSkill -Trademark notice: -- Minecraft is a trademark of Mojang Studios. -- This project is community-maintained and not endorsed by Mojang Studios. +Minecraft is a trademark of Mojang Studios. +This project is not affiliated with or endorsed by Mojang. diff --git a/README.md b/README.md index f807a23..19d41ce 100644 --- a/README.md +++ b/README.md @@ -1,62 +1,23 @@ -# ReiParticleSkill NeoForge (1.21.1) +# ReiParticleSkill -[![License: LGPL-3.0-only](https://img.shields.io/badge/License-LGPL--3.0--only-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) +Particle effects mod for NeoForge 1.21.1. Custom dragon respawn animations, skill VFX, etc. -A Minecraft NeoForge 1.21.1 particle effects mod featuring custom Ender Dragon respawn animations and visual effects. +## Structure -## Modules +- `forge-port/` — single module containing both ReiParticleSkill and ReiParticlesAPI -| Module | Description | Output Jar | -|--------|-------------|------------| -| `forge-port/` | ReiParticleSkill — main mod | `reiparticleskill-1.0-SNAPSHOT-forge-port.jar` | -| `forge-port-api/` | ReiParticlesAPI — runtime library | `reiparticlesapi-1.0-SNAPSHOT-forge-port.jar` | +One jar goes in `mods/`. -Both jars must be placed in the `mods/` folder. - -## Requirements - -- Minecraft 1.21.1 -- NeoForge 21.1.173 -- Java 21 - -## Building +## Build ```bash -# API module -cd forge-port-api -.\gradlew build - -# Main mod cd forge-port .\gradlew build ``` -Jars are output to `build/libs/` in each module. - -## Development - -```bash -cd forge-port -.\gradlew runClient -``` +Requires Java 21 + NeoForge 21.1.173. ## License -This project is licensed under **LGPL-3.0-only**. See `LICENSE`, `ATTRIBUTION.md`, and the `LICENSES/` directory for details. - -### For Modpack Authors / Players - -- **Modpack distribution is allowed** — just keep the original `LICENSE` and `NOTICE` files - bundled with the mod jar intact. Do not prevent users from replacing or updating this mod. -- If you redistribute the jar, also provide a link to the corresponding source code - (repository URL + version tag or commit hash). -- You do **not** need to open-source your modpack or other mods just because you include this one. - -### For Mod Developers - -- You may depend on `ReiParticlesAPI` without your mod becoming LGPL, as long as users can - replace the API jar independently (which is the default in Forge's `mods/` folder). -- If you **modify and redistribute** this mod's source code, you must make your changes - available under LGPL-3.0 and clearly mark what you changed. - -*The above is a simplified summary, not legal advice. See the full license texts for authoritative terms.* +LGPL-3.0-only. Modpack redistribution is fine, just keep the license files and link back to the source. +If you depend on the API, your mod doesn't need to be LGPL. diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index c2f959d..b391b57 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -1,64 +1,19 @@ # Third-Party Notices -This file lists third-party libraries used by this project, along with their -respective licenses. These notices are provided in compliance with the license -terms of each dependency. - ---- - ## ClassGraph -- **Artifact:** `io.github.classgraph:classgraph:4.8.174` -- **License:** MIT -- **Homepage:** https://github.com/classgraph/classgraph -- **Used by:** `forge-port-api` (runtime classpath scanning) - -MIT License - -Copyright (c) 2019 Luke Hutchison - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +`io.github.classgraph:classgraph:4.8.174` — MIT +https://github.com/classgraph/classgraph -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - ---- +Used for runtime classpath scanning in forge-port-api. ## NeoForge -- **Artifact:** `net.neoforged:neoforge:21.1.173` -- **License:** LGPL-2.1-only (NeoForge), Minecraft EULA (Mojang) -- **Homepage:** https://neoforged.net -- **Note:** NeoForge is a modding platform; it is not bundled in the output jars. - Minecraft is proprietary software owned by Mojang Studios / Microsoft. - See NeoForge's own LICENSE for authoritative terms. +`net.neoforged:neoforge:21.1.173` — LGPL-2.1 +https://neoforged.net ---- +Not bundled in output jars. ## JUnit 5 -- **Artifact:** `org.junit.jupiter:junit-jupiter` (test only) -- **License:** EPL-2.0 -- **Homepage:** https://junit.org/junit5/ -- **Note:** Test-scoped only; not included in release jars. - ---- - -*This file is informational and does not constitute legal advice.* - -*Maintainer note: If any third-party library is shaded/bundled into the -output jar in the future, its license and copyright notice must be added -to this file and included in the jar's `META-INF/` directory.* +`org.junit.jupiter:junit-jupiter` — EPL-2.0 (test only) diff --git a/forge-port-api/README.md b/forge-port-api/README.md deleted file mode 100644 index cb47ecb..0000000 --- a/forge-port-api/README.md +++ /dev/null @@ -1,135 +0,0 @@ -# ReiParticlesAPI Forge Module - -Minecraft Forge 1.20.1 particle API library providing runtime support for ReiParticleSkill. - -## Features - -- Controllable particle system (ControlableParticle) -- Particle group styles with network synchronization -- Custom particle rendering (additive blending, etc.) -- Server-side RenderEntity management -- Tick-driven scheduler with lag-resistant timing -- Event bus with annotation-based listener scanning - -## Building - -```bash -.\gradlew build -``` - -Output: `build/libs/reiparticlesapi-1.0-SNAPSHOT-forge-port.jar` - -## Usage - -Place alongside `forge-port` (ReiParticleSkill) in the `mods/` folder. - -## API Stability - -### Stable (recommended for third-party mods) -- **`ParticleEmittersManager`** — emitter lifecycle (spawn/cancel/tick) -- **`ParticleEmitters` / `AutoParticleEmitters`** — emitter base classes -- **`ReiEventBus`** — event registration and dispatch -- **`ReiScheduler`** — deferred task scheduling -- **`ServerCameraUtil`** — camera shake packets -- **`CodecHelper`** — buffer codec type registry - -### Experimental / Internal -- **`ParticleGroupStyle` / `SequencedParticleStyle`** — API may change -- **`registerParticleStyles()` / `registerKeyBindings()`** — no-op stubs, not yet implemented -- **`ParticleComposition`** — composition system under development -- **`RenderEntity`** — render entity system under development -- **`BarrageManager`** — barrage/hitbox system, internal use - -## API Quick Start - -### 1. Creating a Custom Emitter - -```java -public class MyEmitter extends AutoParticleEmitters { - public static final ResourceLocation CODEC_ID = - new ResourceLocation("mymod", "my_emitter"); - - private double radius; - - public MyEmitter() {} - - public MyEmitter(double radius, int durationTicks) { - this.radius = radius; - setMaxTick(durationTicks); - } - - public static MyEmitter decode(FriendlyByteBuf buf) { - MyEmitter e = new MyEmitter(); - e.decodeFromBuffer(buf); - return e; - } - - @Override - protected void emitTick() { - if (level().isClientSide()) { - // Spawn particles on the client - double angle = getTick() * 0.1; - double x = position().x + Math.cos(angle) * radius; - double z = position().z + Math.sin(angle) * radius; - level().addAlwaysVisibleParticle( - ParticleTypes.END_ROD, x, position().y, z, 0, 0.05, 0); - } - } - - @Override - protected void writePayload(FriendlyByteBuf buf) { - buf.writeDouble(radius); - } - - @Override - protected void readPayload(FriendlyByteBuf buf) { - this.radius = buf.readDouble(); - } -} -``` - -### 2. Spawning an Emitter (Server Side) - -```java -MyEmitter emitter = new MyEmitter(5.0, 200); -ParticleEmittersManager.spawnEmitters(emitter, serverLevel, x, y, z); -``` - -### 3. Registering Codecs - -Emitters annotated with `@ReiAutoRegister` are registered automatically. -For manual registration: - -```java -ParticleEmittersManager.registerCodec(MyEmitter.CODEC_ID, MyEmitter::decode); -``` - -### 4. Event Listeners - -> **Note:** `scanListeners()` uses ClassGraph to discover `@EventListener` classes -> in packages registered via `ReiAPIScanner.registerPackage()`. If no packages are -> registered, it logs an info message and returns. You can also register listeners -> explicitly: - -```java -// Option A: package scanning (discovered via ClassGraph when initEventListeners() is called) -ReiParticlesAPI.INSTANCE.appendEventListenerTarget("mymod", "com.example.mymod.listeners"); -ReiParticlesAPI.INSTANCE.initEventListeners(); - -// Option B: direct instance registration -ReiParticlesAPI.INSTANCE.registerEventListener("mymod", new MyListener()); -``` - -### 5. Scheduling Deferred Tasks - -```java -// One-shot: run after 20 ticks (1 second) -ReiParticlesAPI.reiScheduler().runTask(20, () -> { - // Your deferred logic here -}); - -// Repeating: run every 5 ticks -ReiParticlesAPI.reiScheduler().runTaskTimer(5, () -> { - // Repeating logic here -}); -``` diff --git a/forge-port-api/build.gradle b/forge-port-api/build.gradle deleted file mode 100644 index d647425..0000000 --- a/forge-port-api/build.gradle +++ /dev/null @@ -1,84 +0,0 @@ -plugins { - id 'eclipse' - id 'idea' - id 'maven-publish' - id 'net.neoforged.moddev' version '2.0.140' -} - -version = mod_version -group = mod_group_id - -base { archivesName = mod_id } - -java { - toolchain { languageVersion = JavaLanguageVersion.of(21) } -} - -neoForge { - version = neo_version - - runs { - client { - client() - } - server { - server() - programArgument '--nogui' - } - } - - mods { - "${mod_id}" { - sourceSet(sourceSets.main) - } - } -} - -repositories { - maven { url = 'https://maven.neoforged.net/releases' } - mavenCentral() -} - -dependencies { - // ClassGraph — runtime classpath scanning (used by ReiAPIScanner) - implementation 'io.github.classgraph:classgraph:4.8.174' - - testImplementation platform('org.junit:junit-bom:5.11.4') - testImplementation 'org.junit.jupiter:junit-jupiter' -} - -tasks.withType(JavaCompile).configureEach { - options.encoding = 'UTF-8' -} - -processResources { - var replaceProperties = [ - mod_id : mod_id, - mod_name : mod_name, - mod_license : mod_license, - mod_version : mod_version, - neo_version_range : neo_version_range, - loader_version_range : loader_version_range, - minecraft_version_range: minecraft_version_range - ] - inputs.properties replaceProperties - filesMatching(['META-INF/neoforge.mods.toml']) { - expand replaceProperties - } -} - -jar { - into('META-INF') { - from rootProject.file('../LICENSE') - from rootProject.file('../NOTICE') - from rootProject.file('../THIRD_PARTY_NOTICES.md') - } - into('META-INF/LICENSES') { - from rootProject.file('../LICENSES/LGPL-3.0.txt') - from rootProject.file('../LICENSES/GPL-3.0.txt') - } -} - -tasks.withType(Test).configureEach { - useJUnitPlatform() -} diff --git a/forge-port-api/gradle.properties b/forge-port-api/gradle.properties deleted file mode 100644 index f5c393a..0000000 --- a/forge-port-api/gradle.properties +++ /dev/null @@ -1,19 +0,0 @@ -org.gradle.java.home=C:\\Program Files\\Microsoft\\jdk-21.0.10.7-hotspot -org.gradle.jvmargs=-Xmx2G -org.gradle.daemon=true -org.gradle.parallel=true - -mod_id=reiparticlesapi -mod_name=ReiParticlesAPI -mod_license=LGPL-3.0-only -mod_version=1.0-SNAPSHOT-neoforge -mod_group_id=com.reiasu.reiparticlesapi - -minecraft_version=1.21.1 -neo_version=21.1.173 -neo_version_range=[21.1,) -loader_version_range=[4,) -minecraft_version_range=[1.21.1,1.22) - -org.gradle.java.installations.auto-download=true -org.gradle.java.installations.auto-detect=true diff --git a/forge-port-api/gradle/wrapper/gradle-wrapper.jar b/forge-port-api/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 61285a659d17295f1de7c53e24fdf13ad755c379..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46175 zcma&NWmKG9wk?cn;qLD4?(Xgo+}#P9AcecTOK=k0-KB7X7w!%r36RU%ea89j>2v%2 zy2jY`r|L&NwdbC5&AHZASAvGYhCo0-fPjFYcwhhD3mpOxLPbVff<-}9mQ7hfN=8*n zMn@YK0`jk~Y#ADPZt&s;&o%Vh+1OqX$SQPQUbO~kT2|`trE{h9WQ$5t)0<0SGK(9o zy!{fv+oYdReexE`UMYzV3-kOr>x=rJ7+6+0b5EnF$IG$Dt(hUAKx2>*-_*>j|Id49Q3}YN>5=$q?@D;}*%{N1&Ngq- zT;Qj#_R=+0ba4EqMNa487mOM?^?N!cyt;9!ID^&OIS$OX?qC^kSGrHw@&-mB@~L!$ zQMIB|qD849?j6c_o6Y9s2-@J%jl@tu1+mdGN~J$RK!v{juhQkNSMup%E!|Iwjp}G} z6l3PDwQp#b$A`v-92bY=W{dghjg1@gO53Q}P!4oN?n)(dY4}3I1erK<3&=O2;)*)+_&gzJwCFLYl&;nZCm zs21P5net@>H0V>H2FQ%TUoZBiSRH2w*u~K%d6Y|Fc_eO}lhQ1A!Z|)oX3+mS``s4O zQE>^#ibNrUi4P;{KRbbTOVweOhejS2x&Oab?s zB}^!pSukn*hb<|^*8b+28w~Kqr z5YDH20(#-gOLJR&1Q4qEEb{G)%nsAqPsEfj9FgZ% z5k%IHRQk6Xh}==R`LYmK?%(0w9zI}hkkj|3qvo$_FzU9$%Zf>(S>m|JTn!rYUwC)S z^+V+Gh@*U(Za&jUW#Wh#;1*R2he9SI68(&DeI%UQ&0gyQ73g7)Xts{uPx^&U`MALc)G9+Y<9KIjR1lICfNnw_Ju8 z-O7hoBM!+}IMUYZr29cN{aHL&dmr!ayq7;r?`7M3z+L@~Fx4o}lk{l?0w3=rqRxpv z0Tp-ETUvB<*2vTh_dr%}Lfx)%pxlb$ch}yCCUz6k4)hyMJ_Lq$SS(Rd8aWG-K{8TD zDUtTM2SQ|y5F;}M&9eL-xGpj#vTy0*Egq$K1aZnGq3I^$31WARgcJUb0T*QaRo~*Q*;H_Jc_7LeyDXHPh?}Ick1s{(QZWni3%OL|i zJ7foQ%gLbU+dOZP7Z^96OoW5YbS=0%+#j3#o3bYsnB}Ztbu_KuFcBz9M~>z z{s?I|KWR0CJT6eqNlIj57Jq@-><8 zV&>W=5}GL`X|of9PiXwZaoKWOehcgaB1!y0@zY^+$YFgk3UB@$4#qATzJk?b^M#iL zKe}&w?|SGj<-3Z>pDd^+G3w_>76zq%EZGhqzOYx6YQgnb;vA^%6(Sx4?gytM=^m`C z@c+mG0LSQOqF$oK!j8-B4hG`=`%8Hp#$+IvanscDc42T#q4=v2YuoSZd{VS%kBNtx zLd6U%s>y+0*0?dDt&wJ`=F&iRWyJS1Y>kZds97Z^J?Kmeu!Fh-L+F9?o#ZILhhvI& zyE^o10y()W>x@1skNd<(ehL$G%S9yZ>AxGNktZ_$h9RD?hd_YxvNIeb?3~*XE*54b z;}9`U&d_XFzBbijUqrX}i?s24Ox?EOfTz$aTz;dtw~F)!(XK9voHS_ii|YmI?eRrX z%Gr=T-7Qx7eB&|iMk+jCw4x6X6Hae`0esw}b;uVy6ljeACOq{ZM6e`2k%XdE* zcZotR`H{lmO?;6sfMz|Xv|aJ!F2{Ucp1Y5HM68;}hw4h%ntF`pl0QNFk@W?2S67+W zF1AU5YS7<_7H6+NrwMJ)&D8^-Sgj_rttU*gt3dvWH^sG8W6BbhtT{Lm3VV5cSo;$3 zNuSXq<>-4y>$9__aC`0aka&~k=}#N;Co3O<6()7bWgAZuB~%E!lv`DCbEMM)G$IQ< z*b89{3RV{((?H&X1kBl8+K_XHL`Hc=25|M6Djk8YZUc&s3Ki&|KcOb&!$LVf5~6*K z>pgW7g-7ASM5ZZ5?Ah_e13r7Z98K>?leVWPNQs_MXx_&Ftg92|SR`xrt$4|%fVGS- zTNZt(a#pl7RaYzzJlX1vk0kt*Vpxw_{M%KG%Q}`scIVU

pVX@HRij*jw$g4?}Pn zE7RuaO3V!l_a{`|jsZVjZSR#tYwAffrvo3AAynZ^vzgSR#N_HZ6Ark)t{_hJ^zSa( zT@R*X#7rxlaj%ZVUZ1?7!Q9{bw(p9N;v)bZUqGgPC=O&mM zRy{1k%Hlr=aPWCif%s7!4cpn_cTyB1=#k?e8m}0C$)+&PD!&)F?>9;L&0Lpv)ZfP| zJxlb;PjKA4x^1R%?vIk=kv;C0Y*;|7*_mO)hTMlfPH5JcHa>0BR$wlt@&-wZufD82 z51*ufTeW5&M!0=a$FS@0MJRlk*~l8^Wl?2mzt}H8ae}hQ7tSz0sBJs+8lQ!`o(21B z@HNyMoH{;2l$8FopO-a)0DQ&f_jq)|ZPO}_AjDPtuOl4>R^0rLnok(Ezuu@$4lJ`w zQ6-4DQIk{FwQJspTlz!>L$CVj^cN<|)t^;jR~M^L^a=dr5aA!{qg3Ek9p;X{QRIg1 z1oE`2L#=6s6vh%=R(TI9Z5ReZy&?Jtj8aEcyCiP*YaYk5=!QbxQSz|aBk58{{@nCc zSY}$niG-_Uad_iRV56Ju8STIoe{*WWn3_?3>0V>z8)z@g_|dm5vKgxu`{>`)X}aw) zyd~I|(HFpmTO&3smRUnoB$VU&snAXEY(aq=te76JpanOdrwx}UD4D8MQ34z&zcD8z><`W?<_; zvO01*U(i7v7=EAJ@&YE- z4Cz5FWI`J^+_;Ez1p&jMET;4j<<0ymV(~ma*ooWab$s6DuWt>sP0$fuap>j|b@rOb zu^i4yE`d@_H>;F8*y;JfvhSY_o*1uZB+)0G+l{2nmbRR>POBwArWP}e z*`!BSjr`p73wW@iA~}h|mFJDOdP|bAlqD)jwN_vU{ z0ntkb0iphH{UY}N?H5%fR25`pw6s}OWdGYUvdqjNg|VZ<>;{luC*iGup0bRpG-1*u zLmD>P9mq$M!k->%T2{@Ea^ZR|8LZp2lzpBQFAfvFIUps_-Vxkm4ldisDdti7Bn(qo zAYco0<;Bu1tt6?z=(H_4yD~5qL+2##Hfo|6qRB-vFmQ}Xpo&Qc^GdrM6&iQtrIVT_ z6q)qyz^vmNwsqEnS6Vw6kZ1XSL;dx94s%n6>F=ht<9+@6=i_*PK35N0Hd_yKD<^9< zODB6aDOYD_a~CURdlzd74_j|%YZosWKTB&jFMC%PR!b*yPtX5;conr7MQ9H6g65XG z7EMw%FD|O_`*U$^ye1(o}oGT&v6r7mQ)iC|9t;%`Wt_`W`dAAT;#O+)Ge! zPY6Umf)7Er6YsZ!=pEz^$%f~wDcEbz?9OR@jjSa(Rvr03@mNYZ%uLF}1I$B4Hj~*g zWOL7pdu2IQtK=^>^gM(G`DhbFDLZd6_AD4bHKi+I<{kGj!ftcccz}667=-{}7`0~m z(VVjxK=8g9faw}91J}cSq7PrpJi3tMmm)~lowHDOUZfP++x{^vOUJjZXkhn7qE^N! zV)eH6A;SGx&6U&c1EFgS6CAwUqS$$N)odq!@3|yVs}Lv@HEcBe?UTqFr9Nyab-F_) zNOXxFGKa2*Z|&o&`_h+{qBoSkb^_~=yo&NYU~qe1|9&TE|8^(T{$GE;wbq8_qB^!o zWNUaUctH}Q+oBtk0YrkWOS_G@9aP2`<7DUWB~FndluuPn;S@}GiG2Iia25p++<(6C zea7mI68gN(*_{_OvF&*I?P;Q+ZzmWcYlw2__v`ENA>SnKs!v266LL&z9X9riJ-15i z?+VKr6gj*!-w2v^x)aO%fNEX5_4-u@zsW(~Hen6*9N_w{$})i6E2y4Z$h5?;ZS!i! z#Q>M4TTsuI9=p|iU9!ExS=~piozz{USJ)(nwWf1TYy0Ul2epIh)bcRZA|?PU!4VrJ z^E`vzA;ZAfgAm2#Tu0K-8E!~1iW6{oBl4lS-5Fc2%_saw>BKrIuW`^4za9w7veO)+ z)~?rp*f&V-xoXD~e%a9Df~ixzE@AMs{a8am6R+SXhXPfqv!>(-9^g7!X;m~14_ReuNF;J z{)~ysZBHLY*>ow*`^ie7bhc3H$N1qVxaGt6xFusWF%owkNrl|{nn?h~fjxFur;u%{ zPf10%f#iPYY|=!*HH!WbI~jskWo9 z%vV&6J9*nXeR4B9>xWboSk9Eo;%Rc=iE)t~UQbj~kZ}4=;KwNN^|%wM#RG(8q5C1k z>f6|ABKw4TzF_F&4eI{KI~)AqlIA;D%ZP^dwp;M?kIJM*Nn1jZu`KDt@GR-|U9|cI z1nW&P8r5WLE6a}#e-Ogslihm9#r{J2n@QFmcUAr#tQi)Hpw4ELC$U8t>j~4TVQMBeq1ZPK`deHgU!QY`%5H8F{fX}O}fV)= zw|oE_A51>pxJ5Kp`wcemi6jERtbEsty7FV`lJt6lR?dhxnyg>(GW9ZID_9Ii$2i#G zdN8@uX$m?D%-Eq1v57~V)v%f8Se#&b=gLhg@U ze$?D?oYb{i2w@tccty}{bKwjeaiTuuL?Y(;;{c#-8v&4O?%RgKiToLey0P8POL9Kwj|;h#ul~;=V1gq!oLVrP zlwx-xwyB=#A|5Bw>09TQ+~jkdmGnJ$YrZ%|h0VcBeiw@b^J+BlumSY_)*u&%R)>JW z7(0lRtg+C9u68--7Kw&9^AeL`o5cpi$Cy>&&kBT$@!Nt_@iuYI<_q4`b~7LsTn<38 z@q_=pRRz<8vLEbi`ICI> ztVoyd+|~B7*q`1YG&7_fPT`QJ3v;k-%itr5x!$sYj;Y?a>MMPep@UxVTF#+1EV!N> z_6H2hN=N0Xcd@IV%9NJvYR74G?Ru3xuB)BwZmD7Zq}qomtW}na^#(qbREUPzmYN6p ziyU)gFriO8NCoWQj0cX0evy`_iBWmXRAqjv1s zUZv#j5;NRuz6K0Q1#jyMzmijh*97>D-0HyQpPUWas$-Ay(?|{416{@{5KP2ka?PEc zP8oI%1X4Fzj3>}EjfCUk#(+zT!v(}iw3p$!^Q@S^2sG(pZFxXmvZD}i1S#$t^890< z{qTT~_hK@t_;8eCDm(0+KRWb6`iW#<@oqli&F&)ud!?o@d#&sm5DU${T#J~}D*(W+tb(BT9{p5*$hl>S5#Xso0)3^_UA8`Gf}moKyx7WW&Za0bEVdTef`-Tw?^P zr({3nnvcOQnn@C^v4ZlJ=yE#rD^h{bm(KZBy#fUGpq~?g>prt}JS^tFeS?=|m?BaE zJ@8ZH<}v0~>8VyqJvJ#}R!cY&OHr9QC&Le-`&+%tpxZJGbNA}s(-?PsV!b$q%&_0+ zC$k1nfCE(B(j~5wJeTrsc466K?t9o4ZikU!~82D-nTxfSLC5X_z)Z!-7`Mxl(>;hU& zwS|rLUmoy3J@!cI)A2T1H2*w45C!(c8--k%iCVGPe+S%NbpuMfDLuXR2R<(-Sw*)Q7->L{-s5w3mfX% z?>dwU|98h&rogmI~+Qsg&`Cy24+@ zI~yTIuWMrcD~v&N)2vQrT9SR!dG`fB?z&e!-|lV$LSR7AG(bHzQ_;o8Ks!klRZlHs z@5q$YVtIP|a<0ze&Q5FD#f;Ht7tgR7)XE`-e2 z5vVHX7yNJH@VDzGGCwD3&Cv(4HA~0rre@MyJY3FgVyd_{ea3O;yVeEQJ4*-)5qs33 zN70F!zWStyRS@NYDW+6gDxGw=`~nt08}PMWhCD6!_JVcmsBLH{IV-gSc^LgclTkID z#*&}F&%i9%MP&SES zMzGEc)ZNPy=Pe~PxMIJEGf}r)daA7PevJ z9~2FSl=99aB`|MZDS^cR*40E>X4EU#m6FHPsurfX_nA42aR38WBr`!09eh=CTMTU4 zl~%%^;KR5%NlSXF?X@|}Nzv4dcNN+y5A)(8=UF7z_hF-i$MKDqj$UVS0g-WPyV6OL zuL{5wAthWbw>!-gJc}jYTscv0L})-yP{rUPfv+k9P(53RgvQc{t83(%8=TWEnJ)wh!#>`}qP_=0d( zpXBD5ujnfd8S4dSaF&g4qmxD%ZcDIqHsbGQdogW$0;r7pe{%LxZvJL` z)Sw{e>}9oM@k=(Jszzv1@-s+_s(2(wE3G)fjDXHCM`v_@jV67e?bV5N-QD0$C3zKK z-N)guBD&o&G#=>Pdw8OLjXj44&;h>!YZkRl>@noB4|)5}Ii9GhIkpa4&kWOcOhyRr zYx5XE6Z?9%mXL=$4#3A_%wWajqR1kAHqKxmm$x5@7@e3hWo_MNdf6MM9_$VgpoL*$ z(q{CFrM2<>{&S6Y`Toe=szf)7`jYyq-w&el6W+@arE9)tXY|B9U+jR~$~pq1W1&4( zf1+!D9CG<}H;#`2V#UaNc~{l_5Ivd<$=ro0i`rjH&%*uOT(BN-<|^pgFE!NF@KU5* zj~NZ;r9SIE?q%=3o+iJq==Y@ncGrYy%J1c~_suJ-ISHZ8;}7Ze!05^VW#JnSZ{I*& zIh*vqjYFYI!RPlGne6eHPoDm#*a$UbxXeR}t=rDi%u@AYv^@enQ$TaphrriwAw^mOF=o zL4X{Io~71KNrW8qCZt1ZAB`G432Db(WnJIQ9Xk;|poyayjFsO+K(=F|m6yMLxTfq2 zhmA&U#r#NiiRz~z8p#Dq)Z<0#?5fl-h3c zk>UdIdslOZew?=b_};J6j3dtba-*VcI`qcbk;`^8>kFo9S}}Tt9TLu=Z1ztD2YHPu zSZgnhwj72$6Yfmz|3b25Ha>8oD1+a}*z1w7`#@Py95vVcvT9dWRWBso7}3^OX!<5J zFcKmCk8_mJw*DB@`1;2cs z{yw*z5cIMwIsSwBJT&y%JBO71bq8VD$xeovL@et#f6tiC#UiA3`K|1TtQDghPWN8P zEdjNjpM*NYM&Wyck2a`6H)|X}!r?3)uN- zo_>B9W*}-{yshhLL1%rV{8BzHnQYJXCX7}POY9l?MPqbvfq+{Hef^*yK&|jtpz=8H z_xgmW~dlvT_#3qXgYW<(+du)1J=XdbY5|3?mgBC!dit@|i1pYvZ=t));Ws^GhP?7etFJ#A8#?jg99r^mOhBAF0jXRypO-&E7a&sa$~AcYYwYm|HmNboB84e)(T zMbK`=mwl{EXTkYc^^u;wdYm$I2%i?8R^+Xf1%XhS$iBcj=n`dTA0<<%tBGKw#pH_< z7yYlWMvJ8ygFM>pK6F^?P(R_40w80B#^gTpEC+Vb&&-!6^q&-vYPz)}``@sQ%YNR_ zNOaXl*@?QG{lR#3Gsel}$Q`3G)^I1q+oN;@z?#FkR0;YMyIDh(oqHLUT< zk%gnOLPl=j+HtG?g_Bx{A*S_^p$TG^ut?Hm$v?F`vMkXn_0D5fYW{-H;0MI!vWi7E zW&b|5>`<5JSg1K8FkRW`QJo!YzAX9xSr!^0mZUEfk+e_~Hmy%77CP-~XCFy_R*4Ny_`rntN5nAV}SQ6N8Kqw_8j7b%7ZDR?e^>X8K<8bXzAdC{U zbZE%9m#;pqPn(rbEIJk19@n!JN~SaxS$`yFfwM#h&6bLdZ|{BnweivPwU}5iB>tH2 z(DDBM^0Zt_|Dy<)@T|GowT3~5P4IWdOi;~Y6(Z-Ao7$ppc<*sKv0DE2 zQ7fJ1S??EtK+|tfC`0&UMEUqs_0z_`Tr-_=AzULJshV->?K>ppr+5%W&=*Se!)<}1 zK+gBXZb=Qr43OMnp>Vd>VvP)(DB)hLH~_LNbUK&g#Uu=wSZ1f)8T(5(=Gf2ks`Qa{xr90g&RZXd!6JA1Aw zH~bvvn5N$5qQCvfR*XVJ6iySM_p3Q6jj2|AA&s@!J8y>W`{M#gi1*@29nCFLvMWUb5-6g;Dkqe-W%-k<t{j$y~ zZ7Jv-AR3~g)EWPXi8B5gmP=?)iT9XMa^Qn@Af zcoYxd6o}pTBdGwc$_4n>X5-}pENro_;kLbQq#Dhu>sziG^)7u&Xr2tw>{M4F<>)%h z*d@4(v_5g`Ak*QtHlqz^vB9PvwxsxB4q`LjQ9BXRa9v*#!u0RuEzlJ)ycVg!jAzM< zYV{~*@!zH&U&Ky~T$-R{;HFjsr=cfwi1SeDIht|kx#-D|XfF8RB4qEs!reEjM<8hv zU=xYuWa`j&_=@NplwLBteU%fmX+IHI4fhNhJ(9zDJt6~n@mvvoH+3AG!+P>6J zoG)X6Iw7fjttAl^B_}-c(@4+*+h?Ha7Qe8QVJ}i!j`ualoyv4$& zTM5iU^f(^;K#s+&Qy=p_&aT6e@joE3-5OeTOqCbNH~Pmb+&wu*+Uz_5&+87~+0ARQ z-azQa1RfyT*cjWoYYQtMYJ{x=QO^7#VGg+K^X1L>lgQSiibOYd!ftWVlqi~aDO=o- z+b(cjHc_b9&hB%0moVs3e~5e42#vIrUbmI)E&zIrg7U)iRg@&c_Im;P!V|MaVmROn z?(JpEilGtTNb(aa@@UfeGqinFWh)iFm#LwOlE)&3%1~3TQSZ6O+$L@Lu`y7R^%~B7 zE}woyC&?yDU{|jD)NRh;$_FhR(|uJmsygG?T>{I2e56P`okogpWz{AU=73=yy67$ zcC?$q5B2xzV+^K8>>@tTcR2t~S#l77fpjIs0i$7=-9#ZS6mO&XpEqzg&DE)guyYm} zBoC;IEiNnv+0Qh}gVI%z<>#T09$#O%uyxfmobpOu2;?=Z-aZz6=B6kz5tC@rCfGX) zm<}1)3w~Ak;sJLFb4YQ8qVXCvDPZy^^(`&U1ynG$w4j!T$Pp2^f@mf0->j*ie}?xL z7WKMq_bK0TX!EyC5YGREoBl@HlmF3q9iv-mHLP2?PR$&VVlu(2lhn8^qDPP!iGg?h zzIDo*qoU|zggy^{%OZ?O8VEtAn78x`78Z~9{lSORlH*gcFFj!%J4HSZEP6Hzx`^H{LQLn>9BZE|(h!O@#5EOOBZcF z6-BayPVRUt0FB1~Gxql91k3tCxa8S(1yF5Zj?JXj^bmd60?)O(ng`Cu$~PW3dr}X8 zN0(%@SE59PaYtS_2R@rPDH1?-YAk&U%Bs#Z=4V}EIOnPTm}=;NWXJ80W5v^rP&yNw zOx@d(3Cb6uuitL3y+uFwv9=7EN!DQ1^%`EH2`&8D?HfvbAJ)#-iI= zlk*%1isoKmj-Lz`F!S+fW>x2w%1EB67abZ-T~^X9AReExl7sV@p9J8-1MZ>)VHZIm z?34yV$eyp&Kd(_of|WxGRb7B97~_HOR0NM;!K-gm@lH*%e@jhb{|Ov)Tpa(CBr;v= zQWZ-BT_m#=dlD(b6$e{ysnx3s0iOvUi<*Owh`j_qD!OBrQgpybQ~6jcbMp(ZWJK7{;R~r`CMiT z=_TjMgTlunNtE_VbG3eEqBqYns zV(n9T5S)pHyxSo=K-cG|D4z%`iKj@6P=$8kBid9^p^eMkn)3_HY4ENhpZ_?y#~&^q zTK>Z47dR=-AKZP##bkI~@>DexVZ9&9*vlk_BG!oJL1Ei#M3yJM(huR0QN0~M65s`i#`o=sciY?Ti;BPs;rIZ*Nq zOLVct7)Utdh%@Wu>TOw>M#Qu?*$o%i<8yo3KN|t0Y>nlq@cvM>s=!?CtyXsp#$?kii@j51YSaSHmqcD8K`ZPt{xYoH2h@X=f^)X&z zFqmL5sjK4cP8)@&nR2(wmzuA-zqIjoejdoZgD@i7SZ=glz76thfPhX~?i}^91xVVqU=pyesPK|Ax?EHnf z1O&K~Eu-T7cXLWl?UmAoE&TI@5*p(q*457~$mxu0e ze`?(Db8+hu9<5=8UiJ0_XK>hNA3^o12oCJ9D3=tOW);qG~lGfzo**>Xb&J}^Sz2Xu@*zcJSZM$@pHRhL$(%F)^$XaQro=Z}n;Ggf(0%SH%kli*5S`#7~u z*M<7&V*x48gsm0 zVUA_fXxXOx(k@c{oqGAp@b;izt}*_E2Yg|KJCV#CU6bcBo;72f!e%Kp2cO{V?3Fe; z>*8^i3-tkB7afkzC=wr4lTZ7o zsztT)HP5h$sNA@YlZtsRl=e&#Gl(QCszU{lpV(7~#vo^tR@oKk+x_vA>{9osLFsoy zS5)cL5glpM(sKT?8kN0^6 zqO7i<4UJYoF+rGw z)XET!cC!7sc9=ADGaCx}ewNH2F=eNn6mB&U6ll_bUDLk`21UpO#-y7->yTKIaI zZ~FG@O%6h9oJ%<1*TaXGsoji}?}tFbJVcwX1M=*aN60z#{5kg0_Z5>0uI~9vyp@R? zF(fli_tW(z(;EZXwIv(En9K(yAIs5~r2#tmIeG283az@`SA{HRf(#eVG=i!Po8$Iy z#~C&U@?B#rxgN=)qPzmQiPeE@&*|`S5~|rUOhc~rg0=`*x~v)Buyu}`;_64P7&B&; zX}AjY06Y@6)a?YSm-GRO%6f6ePC<^5w#0~Z_^LUu8VNnm)Q3^EfJ!W!p_0zgloie21K}^yuphA{ zr#G-tJ(dn|L()_VxUEim`lAM%-uW*Go?6X}k%Et&h0-V;ux`rvnYSm0U3mpf# z+auH5I<7}3GpsB~X9ldCt!$yBe5gUfraC6~=t%kSWLP(~_J=rU7 zR0Q{HWo|me08i&@@E?wZ^*zdJ45^LAG8Q_~NJ{>u5p<^$TyN3Jlg9x4;5;yoq*mdt znlDg8QcrIE?D?N2zrl!;+>Y>FoKcq~I;7>68J(W(V~*7VJ8M>A7|^ zP{=lk!0_Pc{oOSi0(6+_oJ9L%mJ~cV#qP_l8Vt2^s(wW|U9d@L5YO|Dx&W(SYB6TU zVvSt;VL?E|24F%SW$}4LUc`Ej;2X*s~%}Zs}ENa;}C`S-lWhTf07(0-sp+ntHd% zLgeH>7(T&*a9hy2z`|}sD;WmXD(L#Ye@teC#@?WZzZ0D1-x3`2|8_+Gi{Sp5)%*+1 zIjc`84vAxnSUN7Q{Hj{6i)EG`!EZ(?k0FQU!(~L0%v?O+CCR6@re%maiG0RmEi2lE zf7aM@9>~v~`Z&|Ub^m&Q3%iR?1l7RC##cw@OCAQVDA{%iC*`|?vfx+SJguGM=T3-u z4&+u)a!M$B48?#&<4vsFAXRj>-yxCvz&uuv;~frmzdtFPFj)L0BsSe*Gmuc`JD!#z zPa`c$gHeOUnc>^CEoevD+?_;w1|J|%L z0*cBks6lMxj!yTto>uK;kL4>$Rwc49p87NFU#fJO*KMo$Zewfzc8K|35;l96_aROf zb0;<%`}g5;b#pH}Z4YxFYY$IzCn-B?OGj&uf7v^4ohe@|9sECA73_=L5t!SW<_J&} zGg9=4nxsgO+&Q?^;wai+ACFW({&aY@f|5)>U$2{*-o+YYL29T-j8bB!`?2O6xB*mp z+m+gyhKbikZ(C3UnQv?1h^n0mCoT zG-)F7l#@A`)%bDwv}82PRoxo`N5Pnpx%LXG{7CBroox5+1)Lo^iuuGn%wB2(nvydI ztf;oYgnZ&zj>dZcMJ8SZ48a}_QZq|V&|c;}^%S&F0gedlP8tIO2R$<l0~Y0BWA( zSV|vwDB)Es1cO6Dq94jGL!#akBeCo}wGTYxbkfJ?HaSvNHU5IAga=PON?4nYe?HDt zz9--xcJ4mr8Hv&`-Pnm^es?x-zu-vqF}@0PQrw$uUTGzZBaPo_tZ|6?!%1$GddLfb z&CC(L)r?4F1VbnFJS~-H-m6mvRWiyVG7iI1-yhTnxW4%V62OxrjwT1wPAq-1?xeY3 zu97J`a#Uz!v#4y|8fjcuT@@ZuCUGYg&E_#?+;;)qd`m!jTA)%IOpQ?9;F-FQO+qXt z`z_Rj1`W8JS5BQCAb;9L#~CR4kV2p@K8BW=osN~CdGpmvj1%vXp(m8PJO<8E-uO|H zKjAQ+ABcrLNeMYreKI)BLzK*JDkHnzBMT7j%B~n`y*HS(P#=B2&2l4Yt`TF4VLhS- zM)_I2ct`%#d7>=lTbk<`4dD_xu)G)9RkK(@s;*&S^S251p!_$ZZHu)B7$M7?lHr-W zF%kEdYSwBGCi?dAMjwuuQl25^@qvB7`K+O3hKRZSSMK$|L=-#52Xfh0(%of7Slg56 z){|NTc7J~inp2I8F?ICJGS>rwP`NzKI!b0&NV!ysj-Z+@6E5SKuOjh|9@9KmC)Sq6 zc2*b44y~m+U);H434xpz7!4(t+WhIxA+fx@Aj-?SGo2BfY$dv=n1dS9rJ3*GA|GM7 zEsHJ%0?m=(MMtZJM`;;ImPA#DeXRr&oCH3CK^`x-Th#6RZ%;(*j_1a+w{&)aShu7r{tdXdk?WJ-bapM0|s?&8F+kibcI;Z z9Z-UtlJw?oG&;&NZSB9IEi;x5-qJKjWQrGy5d$ARAQ$wA@+G`d4m>e;Mm1sNfBDuX z;AlPXi|TGm(BpnE8T-ZXf{W~0Wx0qQ923F!n=H|$ktTp_<36%e?#jZTR%lsE?s`|G z_T*G`Yot#9M-G?e$E8&Z4^~CZQy!|3PN*F zDNfkD=^5SkBe6Yl_Le?z-ds^Xu zUGK3)J3ER-q{i5xeH_LQ#opHd`kzkZ8OR$wXuGOI0S9!4$bxd9rX#XpZE1rr4^nlI z%#Ifniqpe2QUU|_*1hla_WJzF5>$w}YuHz!Bn7$|L3T1o(*;+m?~4zM+b*Rf`2F@C zFENS_$mw8?Q|%@8ZDthiuM{w~NTxxb&VSsRle7&MYMAtnOu9n!RY4X8?EYiSeikH9 zOZndU(*0WjmH3|m`aikY$<@;Fy}`luezV8P+tc3XeMs5KTEf!O+S60T+{N7Xe=)PQ zhKd@t1bWcS73alQs#@~xV;CYJB5Mi?KBm+I_4{>vPgk`|r*9%;rv=}|<6hAJe6m%Q zMI{z_E?vq&91RPqy7IqXu2FoPGxhxefqJ98J2f-&`?k`IayjoSKR?nE_Zo_J0q**^ z=CMK65eJ9MM3UF=fpVw%jQosAdgrbkV|?jWk^G=GZgIWH-m}@m#m}e~pO>~^LxQ1C zxf5=MT9cUh7zX(?ajfHlS0m4UuFZU?mWD8edgL(v#~-b6dRBli37)yq(dkXa^0qYJ zm2>PSwXHmOY->)I(>c=@V=H#cH4iqkr>!Jcq>Rj7HCe5!sF`+DSryVrGhj1JPn0w1 zpz1F3V?}jAmjhC2W=WIhi1|62^IeKs_Vuu>tvlSbf{BEZssNH}YC!RXPf5va8 z&*O3h@9IqZw?VV$|3rnim%S6)e?vph!`#iy+C$pj^S%9L@&1{si;jnrl&j0TX1^=> zzle3jf3?G?B1XQFBaK`)JeJ#K>clF%=Vunm%H)`gIijk*u5HkZTQe8UY_h>oeW8^p z@_RMWVv0Q*F@)Uisoy6=JZF1;Y-Ts?hz7wmqN?rggTXHQJ*&xJNSfp}aD++2QG~si zmZ4!fZLnB;l)F@pm1^KxY6sa9z3@2v>*mIZV!qbQltmvKmnn`wiCxdz|KaPMqC?x7 zcHP*vZQGc!ZQHh!8QZpP8#A^sW7~FevVL5gZ|}V>M(b@{_p08j-tp8sUL>;HOB^b$ z;hIbdt|h(^Lz4!n2$`tDF>w>d+R^r-o8L4CV$Dx{(t;5vTIc;CPmAYCX2oT221P|P z0{m6DMhT zWW~*jfZ!{&jQk}73p}09Tf0mmdonALDG0GIE_*DY+Wdy$#(|jSR0=Mb{Usmq-&*Ok zCsP?iLH+L;SJ7sgXGBvgEBzL9X!Z;RdYm;+&8*;3+WY7|s0-y?RN9E6UFwIYEl&bu=-nMHo)d+Jw_>@v)eZkY$8$E+&w}~w$k+G*`#;JKQIBmWvt^#A{Oa{KQHq8GHYbN&e;1A7?*3)>&I>Ywl-Vf>E( zvQe0@{Tbw`B8+7nj^iMN)JBJMJ$R(z5LXRwgg`1KAfa*irOnlN`N+}PSeahWNpMH# zEkxJ;d(a<#rx3vg97J5ZWNArdiIsWV&-)W>2LT?HPe->0&o^vFLa%OWuTVX9U$?5V zfejQ?X|e?mz-n;a^uZt!@!@!QsCW=UAs?r zRTQ8XNK)|mhN);1*Wsgp=~a(a(w92^6ZpiaKY(SMu4&}wp%6OfyRLceC%f=xCKu3qzu@%oq+s|rI$JfnjjEiSl-yJ5 z&C_g*h8aF>XB<2ZUUb{fwE}K_wFQI*pmFoiWa1jwhB&aZpsjDf4n@s1PUvh=bKk*C zWaM%?xyG~!JU)K8UUYy2;p+0qDDAGskPGj)v*r6B2BAdWoLy{KH(Q7IIJhB130S>3 z=toe;P-9s7>Z@J+)~YG92JKow7C3C^J#6P|jnPB1!Rwqme_ipn11EyPmc@XS1EHFS zS%uv?Mosl{H8JrKN{f#G3;|qewLxT%X4^u_i>Fz}0Hd|^pCXn#=wA=R&w#{rDMJtI z*&o^M#SswkL;ycEj3FkB7P<59R9AXVo&TlI*!q9-F5_N$gO7st4#Kn4&qAwL1 ziF<%!Jg8Ee%Rr3Xvo9C&K|l*sRM(}efz`Gqe8mXaZaT$^<)VsFETikCE&uTWs3DGx zWx*Lp8pM_RVHS=@z8CgPNe)#U0t7Cd*wLtMBn#x}*}i7VPbu=sc9D}X;CdTPQJEKU z!`+jf%KLMi%F^;EZHM}qMQrSTOF?GVb_N7Y78K-1DWMeAJ>V^4{!G4ONMXe2mDhTE ztfTP05-4YxaNL=mTV9CBs$FRCk1*7;x1MMBZA(u3mM@oLRj89xoBa&8j~L+0i4)9o zcMIDE8-zVDve({jxwMBH6bZ;3Ry)bqL&Tz= zr-@}D>{Bm)oHD}UXpeSii4H8ck>-&k!B3XxBH|wa`0R6goeadkwK+w{@eWW`ozPTz zzJLC7khb;B?P!NKLSN9B>Rz>=rGQr;-4d34g-lkICG_Jdz1TZ|lQkU1`Q4g#k%5~G;DFt|mKYil=Ox%gkz zp}sQ~xzrDPfb_3y6wCkp-2UH`CHcu&cMky{iBt&{()hB;6kkw zP%0{lE%Zg3{OX9*0C#^X-QU03FtG7P>$saD*EhL3LBoIG*uYr6$~h!fMm~$ZSj8Df zMjOUCvdwJHWA0<`<4N}S{o_)406L?D-NU0J>!bFb$tm*w<_CjK?KyDg1?m**Q1F&x zvdA3LQMzE_Hu_PG9p8Bxi2HCoy0^C*C^v7$ywtlfB6`wGhENk7ye?;xxH_gr^j<|* z9Htl0oGx*#-6I<{2#ZdSh8oCICE5lv#lUjuc_gd1ND7QVuH)ol%3&KZh9aJHxnt5+ zoOs>TE@dPppAjuL+*mCi=6SCcMol=Vepu^7@EqmY(b?wl756n%fsW~wNrZd$k6$R1 z2~40ZH<(;xt+$7LuJcM=&e{1MgRYl5WJ0A1$C3PoVHme!Sjy&9C`}e&1;wB;C;A*2 z=zn0IKV9TBRf@}HLUf7wUPD*51(Z2OF-?aS8g9aGK19RG^p(MvSr*j-yJ~g`;DWQ@ zm>)jnf&y$qO43(PM>s>AzO@c0JT>h>Ml46?)9EG?S`3$r#{^%HIWQBrhVoRrP_hin zVZq6|`SdmdBU2ZIF_f< zwOk+eoCuOx{1Oa;*J8>1Dl~7xLUBf6U_0=tUBS`8K9P_XEDZ__5)FBJmf^FGg^9|3 z7|XM(3>NJ_OR62QE9Rz;RVXlwP1m!3l_XJ$;1bqgLzKSb;sdl;R{JK<+HjH+>=;|FgE)pRVZyy&y+fp6Kz6EOsS$nAil z)E&T0mU+z)s-ApBI_Q_!C)H$*TISc^zyE3l^#U6l=}c0y5DD6)m*t(~#`F$L5~=+; zg*v_EHOw_QcuQ?Ts3llUFA)Px%c8WdIf`U zwUs%DhS#-f$|o>`$MVsSLO%b>+YKvP9P6G4uKjRIlL29b%ULV zI;vtJ@0n`UcH@wNJC$W&9aQSf7Mw1(!(D8Iv#XggE8yhCXAO#R_FNiAtyG)W>@23? zS06PE--S7ya|$~!9cJKcg=H4nFtFurLci5Aq&A|RW5KWK6$LedAgKz--ouWjF;h2O zO?Mw&UeLh9uYdH;S-*W;4oh!-Xad3?2+(<}!<#uXCG#EYqswtbU1VA`t(Fd1C)rjJ z5lGFlCf@C`F|oel&7v6G+dNI|(d_Y;7 zIi!q0l$vFh7UBgcB(r~4Eszx?0!TAx7?N0Vs%j4vI4-k-CuPr6S5xoEY}gFyK$QZ5 zFl+%sE}f}p&ozcc*XpuDluDOFwyv<32n0)?8=9J*L&)N#`-cfEIBsP?OvmE!P#`P3 z@hBfK8ir4)L5}LY<`;lPOrAuQm8m+%)bj*e7&2v8JU`RM<$;kv7VYw|1KjF`CZyVq zQ;BY@l&6}Z3ILSqf+o^-g&8zYn3_A3W{LkCvcjxn$+1Y77M2+{SEkY<%ki!^B6Y-O z#IVs$I}{ez4=MCS2PZhR(SBp3gCLMa(6h|k^ocL8Ru{kfV3fX}Z|ww-Ig2O^a6ed+ zEigF}zE_#K%Od!Z7f<;&t0^|7nzl_Sh=Z84@<+;o2z#58Vz7S@*s{ZR6!Vaj%ya)v ziD~E^ClRVkP@NrNNF_?nJ4-HFQp97PVu(${w&6`I3 zAW}a~985bsE5sI6;-TNDBABp0QvlV1Lh;9`O=G7FXFF4lUdXVr@Yr;16ZKR+z$6;s zQ{9fUi9P|=&}ABh>jOeYeaE$}q>!#8Y%q?NM`0>>$kHHns3;l3sL2Rb z(3U|}J8`38Zwn!GrD>W0$t&Zp&F@&`D0KBYcDDgo*>h1|Ey3XydVqC~=G>q?L=edX zYFS8;47MB01Zsn`BMbKA>XvnjT71yfSLXwMPF7ayG|4ys(iA@%HNTFlpC{x6-}p6N zdhg{jk}pM3y?5#SItjDi5fCpE$>L`Qz#d^$pbC)=a%-NPHba*}>H#$&qo+jtvaTP)7PZStk*}35F|8HEoRnQRx;jguRohf(tGkLHrk{!MSDsI)YnZ^Pmmznq*))B<4J{?O=ge?P*=qdBr{SKk#JNQ z1vgFWb%qfIs)OzT;P!f_Pm$ru;d8nl8!A*+rGd(*$~T-9ll}1tW3xAU@}#MAuJC*L z0C;@^N&3czV9X-jWPjeFb+fOJoUQv$L{yq=a*L}Kd#At~5Bl0l{n zeH7>=^jr!`6Nz1t9E+x7hBY&EexVHXhIK%)k^qwsA*-id;Eark(C~&aV{~M|8FCKT zs0-mMgoGl>k#)iwf)-{t+Rg}68E}9kyIc=JP9+ezx{<7D4+gJ4$?_qsidkan7Hng9 zCqfv+1O!7he>OP?3up_hldSIDw+YYT+o!27ZtoW)_?spE>F+a%KZwEIS6_DqxSRs7 zGXTm=$d=h}<8TDfk%G@F4U>8n`pAr=6;CR%Ba>`9?1y|H4-O%sJ2%!5vA(7=JO&kk zX?ly;ss17g(X=9#nUWglspHq?j@f+YBG)GsQWG8CjK|mXGVC=3R zYy&BsP#C~;wC;oA{He+UWRN8A6vEWVGmaC&AtL|^>nR=S*@8mg_m-SSYh4o7h|5Rh z+5N2&1DIo0wnNW{IFH4fo70@u5TUL~e89t6qm;8njBvLCT0ODrN-b1qqwkByTP2d= z3u#x0Pu-GERkw}IAr@lU{IL_~viIH95L;=?Y4=(fUQbepY_C_Lo6EzVpM~N7wC48E zLHp>NA>#Mo3d}Fzy_x@bDfx6Ljk*Ot#qKu}-ktw3ZdgLkpxC?5r(fpz4J?9V`54+m zb5i>fCc7NelR{wncg9?ka!+E9YRr79{cE;0@@0$YTQU) zVH8x+&_YB1`T%(VJMj*;J3XT{mpNZc^^#0C*}^mP>=g<6Pl1l(q_P$Q2H6-Vr~qOV4Pn%(I>R>u8CrAVRH-FgLgmrn^!-+%wmWS zBI%O;v{5DdT?>bb1PlWdck;m& zG?8;NCa#=2oqHYKT0<~i3BRC?0{+JzM~g-D_D`yp+4N*OC-bxK``0V=Zxki%+)mDkS^pQ12u&|6wk0VNGM#$u+&mlTun2ByQ0crVttGAJx(LP92Vq6y3XSE|2J*}wga zKXbePGRmVA1~wR|#9mGR4wIkl+84^>OFy8}$=ce2qG0gZ=Sh{}4_e&=D03~pL5m{i zP(Ngin(dtf&?oVg55RB}PA>B3f9tXpk^5+?KN4NTze;pe{}w#|qx1ix&HhK^6l;Kc zYb~{Z_f$I6)+UnOFZ%7=*qzDvFsj)$nSTQGY00&)bYD$Vh z=Mp?E7@#elofl?nL+Ajyl*%veOj_a9#V>ZA19kX5)*frI<}B(>&E4Jdntt{df;j|DzDUxwq?|n{Hu!vR*H~>cCI&l7T$GeNk=Ng+1XBe( zfcX6q^Uq*Nu~&LYR2AFsz-f~tS7PbJ=!JATCIVojOo>QggJro0v5jy;xq3;fEzKkt zdb@do>>*3K#aFR`O2#+~Bsi;}M#`YH(+DnO1N5Hl-3d!{3G-A2gk&+M^dSK@3-NrK zytKdh{OIE4Dk@06#=(*W*_5ec^p=7JT_Um3)#?%xTs5fqy@kK*{is^ha)BbL66UmZ zXe+q8B`4Gc}VfQj zqdGkRB6Xjx*!hG7Eoh$%B)ih-SpfU!A)At?X5w7?>Lgj=RC!XmqJ@$`xkm$)&O{NE z7zj9>Wu5a1glJ6+sZqL&ku&qfJe_696xY%M+5{Q*03~s{gF+;MyxclXfz58vZb4r2 zGE@P$l^sMWnne@vmeP766QV|XTKw{f$_};3!{7iBk&;E3vrf2^l)d6O@R~&{!#Z9G zX{wlTM57#oM>Z;L3WuNo-J0C_&@>>~b{P#~_y_`gxG)DMEYUUqq0O(}&>ch-wC({e z9XT=mDtjJVyzNAu43=1Ow}&uu{|Uy8%0MEM-#-nIRG}=!CehVQKuYhrbe~6OK5OF$ zRDCn)f|R{sP1QnPJoZW14w{7rk!oBpOY@y=ix1R7IJkZobR>D$bv$aig~U4 zE<`A;fm7SCA4*XkiKemy+mlvxm*S7%=(0V0j2Cye5XTtz2x5PWHMEV}+>G zy7}=iU+iJQC?(sRT=??`!Z&fkLdo@J<0$1eA(GZuCJV;fWJV>y zia99Dv05Qs{8G83g^{w@@*~vZ2E5C3d$0$76^_=h0?Ay_FCq2?)2z|apx^r6Fq?X^ z&vU>OQWEXj+C6t)M+Gx;fk0RHH!H$ztpj}$<&!a8p{dft1imSbT$@s#(h=LWb3)Qz zYA8iL$QMWV@sfc=0CZ}{u_q6po+wOjpWrpy?q!;VBRBC7X7cF^bZ-eeB^f^> zQB`Z?1o{tEQvXOXqRY*(yLcw_fLf}o6r~WSG{{vGOiUVgD%J# z$j&gdK=e~U|J1hOZS(>U8Kj4rAvGrF1IWBx{2^Mp9Wk$g$C!xeTz`5gS{vz0 z-chgg;3v&I5-}eaJyclm^@TSC4tN8eor7K-uEcUJfuimwaZ64BEb%Suheq-h@Da~g zErZ@oft7xIYR7=)2~so^;HmQf-=SxIl&g3yZzQ)dn&;*|#&kWgLlX0cWP!F35QY=v zSB2>$;h|~6)Z{ZLT?-`a_JrYVoHNvsxvZ$p1q$y_cNN-mV}o;rcFMJONM=PnsDZIr zVC2MVapQDikYN5vCH)BZut{M2Q$T3})eTDtH9fqT2|SXZy|lnI`d{w$f~eB_D8UsS zn7lih>~118IeOB}ai<+1Y}Oohfff{nLFk}6M*X;93@U5h)p}SnK3uuK2q=fvx`Xyn zN>T9xkcy8E4;oi|>Ch|032-OHs zbh>nVJ8-&$cS0SUbBU)ew^T3qUYLo&ytrP?yM~iUh6a~yUEJE{s&}4%{tkwJ%I3pE z@~ClA0k^%03=gV<=L}RkZE7(7;dIzR{69fMY zU^Jt{-4CVPngMr)yA@ywB%OxN(9zlZeJ(P$YIo})tKSEG2nnWbN889d)`f#J(fV;cEu7)J%aN%~_$)Z>(fMP3Vw? zZ1PJCp0N}}5gDw$4Kt=g~m$O6&y+Kq$rbyR;oM+-R`+eqIfUr?P z^Tnv<)ZPK(iuebbZzaRTC4*x2up0rczT;GrI&O00wgD>Oq)Jp(5T~R}D0eh(ImW^V zq^(nk#P--V8q_ccE2YtLD|<`Rffk5wZr3k^DEXG3Po?}a=HOQVEB(M)*a!!fve8!z!Jf@HMHG$ z$9EKahtctY!Uf43{Inms%oP%|N{r%Wl8AXQreHG|%SgOX+R3KZ z^lNIxqQqP9lFtAjcNl}c`z!qTg|S|01BvwIC@gati68424l$8oM_w_9+~Bq9_mT)V#S**~fdp z@BLo^`s#=L`T%mcD=)EJ{Nzv_bWJw?j5-ReXPRv&KIY%_A8P(@L|Gh(XQ;v=Tp18@ z7r>|2AMn|^W-$2JU--UNcT(oY2iZbK8`9XdNGl$Xm&V*)@uAMX8u*)wDN`!HVV7d?xvknpLesf+@g5{Jqk@X&e0;gw;%` zRVef*D2U!@3ZuId8&n;3n2I&kYrq1EhU6q}s*ux(T+P&EymJ&Q7a<=G?M>9H*tV%h z23C!Wus=JN-k`lK#w861^^cSm_tZ{S?O=>Ak^9A(vodXxfpoNh_yg}l zM3JR4aSdggXNv$ftxyAIk0-;5u%ivhS2Q3>Fs1OA;)wuh>KVpmy;!!JQz+Fa)GQ^- zK!uQq2@hsSSp;nlsLM!C5tlR5`MNS6;IIr1_*gST6*BcvnIG;YyYGmmuR#K*= zW{uWUoEW*&=I0`Hp&gN!RL%z+39N<~#$AUFb$6G54ADoC(v^yC)==1-043o{yYRJP zyu`f4gc@N2j9u_+SNa&F=X+x+p#=hz8Lc@+1ki6W8YaIRTIemmIfy7dp&X{fj~8A5 z%MqUqz^ucP8mK;Nv?k6THibm?hKYU&l+RPs?&Z z1TK|`k~q+aFp8HT)feqXLhxS*m?YjEC#KtJaU7mYr$g!uMq%M1bm;dJ2e&Y7Q#L)5 zG4CQ59$X@{@~7_bQn`oLt_|6Bi~^4)#TQ}_xI$wrYB{JZq{uj9P__r4Tob6IC=Q}q zyu>Ec6-bEPsLB?pwBd4QBos#AOpVQ<=Ih6#w51-ET{XQ)KLY4HA`top_#AApi$CTs zpW(1RE-Yv4G@SK6yMC-3ZJll<7j}Q5jL!+2({qTggu>xjpO@Bs(qP7jm2sgow0Evu zUa5Pf zB$L4|q6bjR%lVO1em~M5oluvKL9?Kad-PZ0P0t16@Z#D(z;1?qUXOli*7Lg<#rW2V z0;mE!U_v+b8}Jit=ZwzDfy_G)d`c6&f+YBWELL)f^||ti_jW~^0=}#u{aqD1418FZ z=l{IshzcY0XC z`P8}4`8~_|wqkLI0@D1q?S++|j}8nchE+58NX4mY!|AqaMInDR7D9rWh0^j@qH!}( z0~#|rFu<)PAi@bY7dSWO(4;O(sW90AHT*0AgX0ClwN;lZ!_XRloGo^d(oR=yX`7eR z1>XR(6OY&6+M=Sd75vQ1EowgN+9r$4?EOtY4*lv1`$Lmj#GZ-`YDS!BGyYhnrmf$W z75wW^{L&R&KDp~P_kfF`!J&oab3foYFq|9uvJhbD!7kN%bw7DktjkmEy!5W?OT(c% zaGJp4Lp{#`F8Kj@Z>Ss0O%0@L z=_o3AS=j7D=%871sN3^>4%ZY_={S7NJKB5BZ|4RR zQ$Q7UxvnAL0uU9+9>1QsfJ}Vsk*j!!RFk+XflYjCk7$vTJ_2SjeXY~bvXqblWkH)8 zm_H8Xf6>cR-*W{BN_PLc7{{{Hc%%?Kj)Xka%N}5vxmf{!6{I)`F4FaaRen>B>7{M7 zFH;#D`{Vs0{<=mIehp`2#J!lZkG~;8{n4Mp0vT&&EO`ri*GTBE<@9%eA2EM~pMK|a z52w|kkFT#ceY#i1{l$%ZzzP>fzWZ#yiM*F4I6Ykr^6QAfqcIma+F$($yxTbswfDlgY zjgc~blW_GD#X`_8!LVXh#jx=VfgxneOSO`fgCvdo<$IRqBZc=+iQ4*V>q}zr*5$0y zCjk@J6MX~(C&%#*)pueRdgDq9e0j9PB zH6wwc{sz}!wSk_j`47%~w)U<~RoFV(39zI~L8E>5;}$1S)B!fUVwJTcH%^mMu~pJ2 zZPlV%ldph=kh!imgV=`k@d!MVYlsVmU#lPh>!3kmtG!ivoX)l=Bdj|w_Wt{f2|>{3 zNSJBa$L3sEA!C~DNco&iVHGD>@4!!uXNlu3Pk`?puU-1z@$Ouu+{YYp2%M>$YNN-R zX21B@IoT(UP0b=3v1js}LcOnCb?I|)r)^)mhCCFjNA8R6vyr}%?s@mhmn#KcH}bC% zW;QKLy@waI1`|<0|FQ+D!u#`z6h~9hlBk|$5N2e3gRK(2L6k3test;wIlH<@Hv+Qn92fx zxYGjYk#gV)nx5wDl36YZW|c(eQM1iTFxD$M4EWQ#@Ikmnos zgpO#tUHZE`YJGE~gbEs=MG9M`5m7I=qR>=1V z|2UtTmrRK@T1SpqX-PKPSeeIE#~-b^&hu!oPqmU-_+LgJG;WHj{q2!SZb7%m-xQ6! zprUP&%cs7y)ikUvpz?yHZLTdbd1_X+sV&8NcR6UqFVOS~I=djZX#X^7>faKhzJ#Bp zdXF`4{uJpL|DxC2*VjB(7e2@F)x1`h1r&p}vA@Wx#D!ct;SkNl>2{9Z_i?V?2dr?D zEd@K)v~=zX&B$_7XuJ*Q=;ZT)|s#?fm3jniC9CpukXut5IW=yN2N`|3UW`k#rI*J(Xog2^D)Y~x%W47}h`A5$ zmsV?ZyTV#5oJSmcHHL$rGkvPMqbhJO9T!=1UlzT!b*#&pQAD1fXRNT)LXTW-KH9P5 zqX6mHvf(zeb3x zEXeM>NHfb5+$HJGc+3)(nv@x8IBm+l(_C|(TuZNmP2*`>m!y$tW2AOSXO2r{YZStF z+Ccj=qg;lR(Uy42#$^$lL6qX^YC5E}J|Aurs@Ss9U?as1KZVF7dFk@jU~#Dse2ANf zF`pf3Q(VNOxBJMQUQBKAVH^sz485r#JAS)NU4%V+&Wow4Y{!*St3Gm=3c?7!luRLJ zg8-;Jw$eoq@LDU6z|5f3BMW1QW;(GV0rdsOsTMc{h*73QQFwmZi;R`xCLKjs4V{8z zpkLk}#kb!1H{sV&A#105ow)@<>CPfRO1^->7RCgfoa0qjRbtq>1#mQA6~Zmps*9$C zR{@xZBNKF?Mq2ai!d{@VHsOXn&+e@mbit@0s%m5tD@)I6_xzwH=z`O|vOpFckg9%m ze}V)thirtajxb6>mow9(IM=w0UNx?l27;MU_eGA7OLmk!q@j@SDNnEli|fF2ROYDX z(@@F^{@`$zOC}1MbT$&$^l@;LAtU!dl=fKGg;g3`;8!l{0*2`6io3n)3Z1lwW)qSMX&&H6B6op0BOsY^48CdE9CD;j|AytFc#uUQ^dVqKV zwPRM8q8!llV^uFELm7t;3^3M_RLO)8_Y+j<6@LtI9XsF1+}4a!SAPqcNLFg9^)`Fj zSgEmL4kjDU(UC-~)XR&&6b*YRSK8_SzPffPc3;=6(lfX%ve2OsF|@(LglrJAy6j&3 zQ53Gan!U=F)Di8RkReOBn>zer+=(TSwGnTf z*Rnzm*U6Wo*mtLhu4%hSke^_>nlU7&JcYPyEYiWY@cQ^DiF~Q?auFs3K@+K8;kuMg zwuV5kYV-V`8Pa0Rn8E0n?XNhH*Pzdpue#m!P-{kDo9Kc7o!U8?)FJFJY5DV=Q*K*H15|zoaeZ z;gxIT%0tMEjrEbAVn)F1EeL*5dWRT{nl;)MIguR%znlTsrb@ryC{?py2EGI|CFryT z!uC0_J2yACqMsk976rAxFnx|V^q+Qn7Iu;++gH158K^3#bC1z_krqGEZP2cH2SaAd zbWdZR#Bmx_1o4@I!Q%W3n9Tep>w1BA*_y zE*4?as4ov0?r$f9#I~7;2el*Mt(EV+zC5+-Le^6`%OR@XZ!})>Bn}{U%S&l75_70R zb>YYVd*B6-9;SVen?o4vme^s{;3Lh@2$FpuId@#!0V5XGt_n?Q?>0Aj{qI_?>+^xw zpWFpX8(TKSTB&wjom%A@uC4MfE>)(Z4|)#^vatul3d|Q&;^cbIOB)Ncc@bD-%Z)*b zPq1FtofUV>ei{WDtc7W$-qg(JrT|N}TkwuR+3~h=h~$sN2i|q+rc#10nyXjPFTte^ zX{QLKnDAZ)>$oJT&c$sbSl&ZaSmvY;Hy(U_{137EqvMIR4Tz3wJ*XZVoe?g>F+901 zYd1hLOzdEDvb{a#imlA+k7IPm1n=9%CPPZiV~iRw30G35qwSMmnzx? zIb+c;+iZk_2SHQzZBl&ygxB(x$tptwTl(*r^Cng#Z?J6bC#<$TK!Gh8s*s1u;;pQX zvRHWJVDysYrJS95YnW<`E0@-JJe=tSHzbs13RN2hQt&+7Ng;#3e^8-n6v{%EEkz8t7b~IQ zE0;F@wojhK9vK%HemcA8cBMI&s4v@}lHkJhXfrM1xj8Ej3nMj}xoUbosn^ObCdY7b ztp_(h)oP%ekys;b$wHPtmL%paSC_hQ*ReRSJSSzB+0-?Cy` z5(TS>p0S~tJG>R~%V(`qVL47z>BzEAo2^%wsckeF*O7_tEk%rL^AH+1}ZpX?fat+c#`9u{zqNInLk*PD-r4NK?HTgbbEW`hdk!^+)OerVxh}0<5*_sCkD)>jE>PECJ(`rs&vQSqiBi5#XrQ+l@&S1Yd zW~|6Kcs&JHx%qg0uNT5t*sdKbwI=mIMyH0=l~^7n4%Gx9Hr0&5HEkKzFe~Ccz#3>T z8x~`%;_^u&p%ch^L3|%V4fmqvp&jfpm{lcT_z+Z6sX{br`z*-z**l( zV*al|m~_3NXsFj%c&dvLtk<>Lzb&cp_>bRZ93&_w^(yYX=jDDbQn73PDp7cdU?aL*BL*VK;Q1cou@ z<%G;A5a@!4(@Hfo`NlXWafmoES8>Q#r+J<2e z(k-d+ZwTe`VlkbBAvPyD3t3`rz9J*x2ndxGh-PCkPFw{eMk~JwiK1`nq$^QlOp$CYm2hBso=rlg&n>nQl`gxTL!*$p%b2}P zBf8is+YZF7+2?v68)+4;J*=8pE|v(|x5qBE#a{YZEy5HT&i4U?GLdWzRHt;hud(O2N=D&%P3w#yDOqn~`& zeDzN3*cbj*P`#yuR3A_4HXNW$%i^6B_B8n4*HeP8ZuEu>)A(~TY$dutg3yjiq9{YiZ?V#Nt_LA)uWe9>rq zOHY``mM3W=EdOW_B57D+$7}l9V%T!+IC(oHe|atxeT|j1b1hi?4K?{V!Z>rS-^1@8 z=l5&k_Pl=J`@e>J5(Dl*2Vs8TAB=x%j{YCy*#9<1|Fiy=1;>BzKPK_(|NPN0lh*jjF#w9UmGnIgJ0%yOuB27j%sZCTS;t8-sn)vVC0#XPY$6p_koe4npSvG-=%AfGn*3X6--%4AUZ@@3_ahu(H#@uo&n zxre;2?qg+#zsr$OUQ@T-en-C`fQbw@O5YhpsEn&jzpAVR6zusmS^ltOlApN`RY_X~ zI;3&Oo?-f&#_gWM0U)t5HI+V1(@V7aD=M8lFE-^3tyu1#!4b=jvwO=Qleo`7FcV~*8oYO?n`U&ennfyJk^xQJE)AJRf`t%;S^ z`rFA&buF1xT+8q4X}bOSXMlwFm_N31W$SwnTG%Fk`{R(@-(`}(Hg{QC6mo|3uNnK`R*%TkSiL}N;=X8pxjI>x~k?l`hvnV_S^&7%)r-bq$H-gKFPQ1 zbPE7d;16MAoZJ~ZmW9r&iK%as6H9IJyyvmI?!@7Px0&B^L$k9cVQn6%oB2rdbW;lM zzlccZ`yY zb%o6E6xNkO*s7dVe9GAbbpt0G z#S(Rq!VJ14{_28x!6FY~v;`#sqGFDj(~AhsBH(PoQ(QJD5bF{JS}}>MFJl;{^0(8u z<~p337P0WT1+Z1U!t9=g6%jgQa-J~nW5YY*0L)x{M6)!a9E8i-C{Jf zC1qZ3Ju4q~Ov~+1ZN8NUe_VT+rbDnTLJ`I?T#rteXL)goXPMmWCA-9R870GE^e&K= zpw5b6wUSbaZMnvRYNF}#a#U4?33=bqiSdbQXve-VTu_dpjnWS-N2$V}PkQ+f)M1ce zS3vxWdnXr>Id@KfzEX=`WNer7%8^nn%(fsia8dL#VEHqwPSO0AywiDTzw+?k8iFB< zR)SiSjbbU1$53GloU_PXxbqpPwCAKk3%xQEsvusX%Z|>Y8 z$hFs9_1*nu9z7Q<)-#+=`|YAUlQPQTQDIKJ~`Bq9o{GoiVlM9 zks8$P!tjc6^$GbkdQ^iYJfTIohMEsb10N8G%WXpn@j)e)({uf8Z0=1zgBp*K#O1^u zX68l$9vUC+Hvsb1>qZ1096EvnKakT5X-ph$RjPebuUt|6!%uOq_mEeA5%}5C*LtvGPt2nN(CQ4$k*B4OxOsx=&{*8s}f87Kq>Ke&M;dh zo&PMi*My#^X$UgQM1Xz)M|lxbX0k8gq*DtnBErf`R9lR-7$cw59vzICBcG+YYO961 z@K&yAg4M?gGu!?(!lhm1W9BwIV6NaTS$&yXa!Jk%9cB?8mnUqLojR1UZX#C>ItR%; zG)_#*l;PTNF=kHof?cXZ*z}OqDTAckDzNk@I~rz$A&Yfttt9qf4rI|khDIwDkaCU0 z^{&56PF>BFbE~99Gu7d=+;EmYkd`~1b2M6~b&`{6A-5PHL|v%pwC}5f(ZX%K%v#z! zEg6NIPO&ZISs-$A9CmDoSN8Gr?>36*Qv;JNW5GxA`VKRyHULY~tkcJnk=aXVvn93a zv^?!_jh4r?GSp|#s|CM$XP*rVPo9;XwTDm!OcXxUzDIJ28bV)ZzH~feD?t22ytG@BiG0tF|Jr48RYwfkyUTe-hzpu0+vcJD^ zm1jDyZ`nlkG~eZbK*YsgFr2dmlDOKBhqZ?k=7km~+p9rBS&rhDAs$Hv&e(WQ!e00V zlb%AQAZBv$2TUq;OdBu26sDHtep#r@$42JkMaSdG(>!|=k-GdYZ$&d{JuBTtHSPns zcE^hIssoLqm!8pOT>gS;G0lDr0!OWbLxQurlvb}W9ogPdRow||T_}I_kmBf8)5d6O z(YyBp>hTvGD%o=7(~un0z*A_m(7@?eqIj9_Z7CWaJQiz9s3cyFpNShe9?ItFK`?E5 zpXL0a95Vq^BQ_oMGCLWT@+$t4Li(ln%P#6H^nKH?4A)P(S4}cJGs3C#d>NI@tW81s zij75YC|**UN#rEut6%X-TbDj=VoNPFvSB&m5^?dl#GcBbPZ=!m=GC6JODb|pSgZCw ztCg5B9PuE~OIR27yM(kMkQ(!Ayb3B97aDLpUe2mTmH^RYbkLF!W-<*pORgM&3RY5s zg->y6VNScDnxd0{AC*!28f+z{V4QhQq4&4FVZ3*R41Ar5Um(?ezKG+&&%9bfIA?M} zA9{i@<~yk3Dfs~1n4 z^@R26Nve`GN)Up+_acpcQyB{nAx4RYRdc8S$QIP7c?E7%!}0X$^5X zswW}mTFr6Z)wAfR#4*LC@Zr(ZX24543MFZLaO51*p(z*}G4P-52sT^khk#jOeWpzl2o!2Cc=buDucQ-a)H(-<0~A zgN{F!bDw%2A?63Ua6WjgUi-*deC;(kwk#Q$uy_N+Jq8TN*`sG#8s2XOELS-*0rZQF zre$(Nucb127C-ncK<7NfF#}p4#eG9J*|x=lDFdOoevYABGpHWRu>Le6p{46>jjd0G z7CwmzOJ-9=OmJlAfYKD!tWE4Q+Rn^}SYHVd>R6lyQ;$Dj-f}?qp3S~~{1VBz_iK1c z*2dOew4A+bma@?hLk1IUwYvdR&Bj&>_7yn$jeN%c>XPhYlwwjL&1|2^Df!~kgnolz zpp)zZcqrt1p}b#g8uGp$$8}a_Es*1sb4Y2m-fmwylOT!MukmT~H0658{#zf6@VAP@ z{HxGp_0wN$i4->&2cq)QAF(TC=XqA-%_F%|KF^+54?=Oy601KXeQEjTa->iF2*>${6U zNfJ7=tf9ndv)#TaYscj|kiq2aYO%3%V1#Pb#&v_gt})q~3Rhftzo*zb__9d)<;-T` z-WTuTJoD#xS~Ds1?$oh1JNulMim_Y7f#0$#naXiiT}_Xdp-MF|)K_C9wdvXyv%5-y zv=&BXwHKT?bgA13%ay~PkCV5H@RGHY+XLaK2QaYt!y;+hp#!6L8qp*MOeFNW{mIzH-2sTmXPW$mhoITa79;3sj0B`5yVnXsAFeC z9ZDFq4NNqb7#1P`fpMSN`T z*uXRg|6DEmNOyQtiG8>m#6Kv9V}lC`@K`{D=j&kMqDx=%RXm5Cs#?}NZ&Nckw0cO`W^Oc`hPtDT{_5b0WTY)dZ;8 zJ#&KTM2)%{3rt1enE@N&5v4?_1@OdUZn?U*`66nqHR|Gb>0h!<3W-O90hbQ&k# zOFNEtSV!X$Z0I^S&g*i3_`pPWc{K&*>4!C%EUetBw<7yuo5gc9T$B!axCqb{QTy(W z^#1NanWKZ7@1Me^J7Tqd!?spXS5Q#58l7Q`+!XVcPq|l#-8ws1?x?w0nkYHrBUNot z&gf=wtU(uMWI=R+;ukx_=|b$b&(09eFfUVAu=K8v`NO*k8p&oa2Sswj#TxpIf{Fr@ z(tViq2@(`F5I&mkMM>FQ7+j=3>gNofYMj8*I`Z#9&fih;50<=kIcAgLo|~R{pf)v` z$|oWmF>-GO%Lm=Vp`&b&hkP(X-7I+NEov>r*oQCfLrW#06P5=1aM%8QwzJWxUUgbM zd}6z`kDyFi6nnV*%hcf4OOdN_E2=Vk9sBCvKZB25VJPb7f`2PeB0RwFjZHLbsud>B z1dyZbAs+;_;)8!^A2&*6PLx0dJi9(t8H{=T&na_6*MA1*2zFChxe$C}qtkh{STX`B zAK>Atx8R3aPNf|W1L>EQBb0Yx*1inT$`Ow9$`*F&^q*O*EBGvZHcP`M3CH>lva- z)+;y$Y&K1gBDaAnEYFcRf`f>`N>F46K07E3qQx;O8zzS-d$r5*U%HQG9ydU0Gy|IZ zXJ_|zwLg4$B`^zKYg%l)LC*h63~KaHpa(1l2QE)&L-BX#saHBovuf~dm$X;TWgZ3^z|^;enzj_vgsX28+P== z1g#k33Mdl;W)o_+5MbR=1kQpO4B;wz`dnuYH;y6291Uu!S|jLym8>25G^ns+C`|i zU8?IW9*CTp+=#b1v3;Y^#gnj$#!+9~-|sxPtwrGTnms&B|#kyO6t`q~ZN) z-8vvD?Ni@K@@%2GwR4uD&%*w#xr>S@m~0^g3?_xG3yIyrQ6CRV_fuPnl-F=d`^?AX zqN8(~H)ERx><1xs6#_(7nFZ`Zn_$C<#Z#QKAMgjK6vXqkHN7lIM;2$a1`)G#dsp%3MXqQ{wZ zwi49qr;`zM68#yL*fzn`Zy;0UBVsAP5wjv8#}+Jr6m95Y0IfCV>V@ zbvtmr^LW8tUX$RWhiO>rp3Pf?u+B`GXp!>LMLVc9;05>a2 zJg&o$#;ZRz!6o zM+aOFeHgyi|3y;1HT~s)0vwjT4$uB`XqNHkGX|JE3rwSFZ*FXNO{*$x@XYAHF9euB zOPxR!tj6$=>Vc>ncnWFF6=Cu99TnveWvY;dB}fO*=jz$8^2oqZvCVhm(a3G)qhAId ziV&ZT=VdcI9fO~7JK{PfaAVnG(*ZCt_Gm>VlrhcJCtGjNTzP;?wh=9v`JIn#X!msA zrLV3}(zQ`NaiNV3U3C~@kypU2h{+$9cwifsq_f9O3rdU|0O>qFI?u;RqBqZNk7CJ7 z&bN5b6@lA2*K)iFnm1ZEIXsuEH-G)9!0fG@{es$9F}EXXf&2jKmJ2XsA)#caL_WWR z%TUPo6YkgK%^KbYtN3KnXElrVV?)7Iiq_SM^EO=WBOg{NQMP1~G<(Q$3etTtTooqz z269cn+^c>ZMaZxzD5hOH3l;p01qzD($UBz$R-@*KY#gO_`+f$w%N(Y`qyzct>8$qn z(+{*ZcOuU)#rtx|LZeXJ6=uvQ*lAgZmS|T@5O(s(D-a@Q?ayr@5L|2|Tg~@b_c>L2 z__306iq%m+V~qF|ACYkfKw@2R_x8;s&L%G&lTqswsbbZVW)adc+qf&Yk}xvc$5*Hs zagVTD?4VmRkx@0Huq5{>Ow41}GC-pn#uq1j{9>W!C#!^^&O#Qorn9Wg!-y6qM@Hue zltD~1T;WZB6p^cj=UtOntm|I}@3!o)2xEg7*X)Edk0Ky-fK zlJUBV+WA!)1|scHcmS1IS2+dMSbQ}7NBA4QZRYmjr15bEDB4JAnZ6yNQiy?}GU=8m z_LO*ACAVB!>ot4aZyUb(31GXc726pp{V9T{ZRe%vRC6#z(=tk)TL`C@5^K44rw?Rc z8~V=G3jbs~jxAArcF7d=(p)!m3ZHE@(5)^HA(K&E$5purbnHLtrd+b1-SlP`yS-_; zs(gPp);eC|BcB<--$ZA`Au9>%nZ%-H1n=5LuR*yuxjlpLK*OW~vo;pieYmOMNo8z< z+{>&h_|o*b5d+!4{Bv@D%CMklf!yP%?_o%UGk~!?^Q!^RMVLaTwYAdnjP;IzQ{C?c zuv>6|@i^+h&RwZ;u|OiYaI_~Y6sX_jGX0em)A^-l%B=R6_r`ejX4>>UJlGQyzhV~7 z7UEBjwMkz-AT;7Xgt~{a*NJoNIm<$|I*%{rk>Q^tFv!s@@a#Mxb9>7Mb?>Az3}5i# z!9W1HO)g>Q5n&fA5aAvP*WA(9Y(Kf6g1{H5*0SPOUN7o z%p2P2;4o09l~86ea|C^7znvop!ESRRyq*>}tr7vf(QOR$_V6riVv1WZZMV_ zKij&hvKF1vkP+LX!sPq`E!kNfBc7y$#~taz9UtA^7UgprsF_)y1;~Ry_)q*ZW1d$u zqTCy4I+?UI;f#B&DRznrAxfgrw=NkepspfGl1l)dh|){D2A1IphvFkWOeauvL9~n2 z{o`fCZZJ)G^evX4-41DP47S>$`O!em#-`S{Y8;T=5#(93h%qaig2 zNmzuYSAr{EEKnEE-X33eLrh`|7yCHEB8*K7K*Cun0!UEEj<%37yhOGHNSO6mpYAIp5NPaVSc9C{I!#62fF6mIEQ4?8sMEpE(o=9mky-V=L8TK-b^EV2!m+2m4c zE`)fOy&l!gie&EN`Ek<@>`rXD)UmsnW@E`k7%Gp$r;^e0*w*1J)T{t5)P{BLE`2p` z&RBkKZr)Qg@}QG7xp=00&A9}j zX{i}A7m@cV8btO(?xp&b;}E^r2}nJz3h8y8pJx=@4l>nsYb5BcKF*{ToSh4=-9g0Z zb)Ji2yc{J+v)`fAIQ*0+$Ty4SWD6T^=&0j{mFn`11?MH)Q@yG|joP^5P4BJ0GU{b9 zgG5``R2p!< zw1h!cv@m@@tjbOb-RiMdHA%4np26r3-GoG1E02X?W2~^SdUx)7d>7iq+4=HpfWm5R zCpo!$I^k@p-O+Tb`|;KJE}tjIvCr&A$&(u1aB=^IeS{I#$b(3GPC!WZft!euv0VQL zC%s;qM6RkX^&1BcQrKyq7b0%POVNLs7aEl%;X^dLxIf53jKVU zglZ0=okrM<2-%2jaNEZWGoD1kMSq!kv-+|pFQiQQo2AI5-1Si|v-Q{q+>$bF{R5vZ z0C>c{yy0gt>F|T%0-#sV5Bu=zmfMSY#~DmRI;%W*QyMF`fy?`8FxHofRh8L(pd9#& zb#iol1;`+wfFl3JT0dU7-!|pTa}F#4QlkMg*>x?oPL}e6FZUHIvy|EIqrsYGWzr5$ zp@6iWZVrWKSuy$KeXz2Iuw(8;M-&mgRI~;xo%M(6LqJY4BfqL*fgm;sdhZ8$%%bha zV1l61PHI34+lfw>Ys^~&4_$@Gbyk96Fef~;C{I}nK^DJG4XR|F)VJX&^V9dQZ-0oF zs6F8V+NWkvnni`AZ{LI}_J-hjhS~u)LLWEdY%H7*2{Dd=6*hs#TVU(J{fIq;An{!+ zn2E9-@ zZegpT_rXE8G#>nRy1^`PFscA@zvj@9dGerv1~1twD#bfWccCk}f9M(4R{{G+Xdpid z4xBBuZILxf;B5LMn~+%BC-~XsWfrFfI9JkG)0Ea%6w{014m)B|PL90ub8p2(2DX-m z8?3bf3dwMt1y(-_Q2g5?ZKI)b{kntGy^O zp23Ri;p0|TF733ZsFj*xQr3P(ET~^qr-%Ob<#$0~iCatY$H(a5T^5l6?ZBtp{7vXQ zswhdYscNN2y}nq5&+3AbZR>Vge}&Z;H@7ju4fN-=R2H-N%(&1+D#e>ru!x5(jVW>-HDcn3e*n zX1htG12i+^(gW&O{DdEi>_@-j^(U z5T3QjimlU@`B}qoK9=p6o#<6w?iB(~(kClUtuxD(6}y;MFESngI9m=Us@f$T%|J3o zaoL+0g0JBW&jdJMa~}E=kv)HGzSH0Lgd#`o(Qq3ifipq)M6qS)7`H8v+*#2#r>--C zY?X#Q0X!EvL9bjjNDeQq0*V^6J7^wA%Y*+*DXL{8cs1lFa466*l`Nh`wO$%hdBqOg^;OhX_VF} zQ6#S&_o-~%bm(%qpZ1v2$Y;I{dKilI)ZE)G*vKq9Pqb613ivS`X=&7f3>Zj- zKSd~}t{_w6Q!b&AvGTg_Wb@uJRrO;}Dx1|NiU&@Kn;TRk$|Y!rQcdH=8}F4%Uin(t z7W2uCLUq1ke+IBGzen))VEU<<)I-U z0r4L<3L+0=Bqfwp7!@S{(bc_0k~d^v5F7A^<(4Z9bO;D*TT>>}zxdIZo>-bQ-Oxf5 zu{C{R1?I8_3!WI;{AA&Kx8;|*Sxc|L%Yq3oukW?i;txy2_!Z7iCCTnOhujvVxsL8s zfLHR@l372@_uj9Z|0RHCOCe$cR#W&Fklmg2`(30gFlmnpxCv3<{R00jBpGmt)jxOF z-$7!m3g&ipU^Se7bt!nHfCVe;jepb31OcpxVKAgDnDqH}GqWiE0P=4v zM*~~qfA#gBV5Y@bA7+3DzB?F~`&QR(f^X2@Ud?}D{yE%DCHvdM^n&(};grErGS5tZ z)0sC#(phgcEQtOOkp8?$H#Mq-ZUMzJ{sGV*DzM)jo;M|3Z%-!PEWbznP2b&=Q@riG zlk>lv|J75!(1^Wz<~L>kt`!-7SU%tHo&RgV{pS2{s#)D0Wse1JLHtLi=ug!I?>6S9 zLejN_$q!o>{RPthtd(^a_okAL;4NH8iCeh;A2p`Cpf{CVu0?u&n3B{j(0^wQ{z$Ut zF3L@@iQ8Q&Df3g5{|HR{ZyGUoac@%YUrSm1Fhqr4PyPM@@$21lzgbIt%?SF#R&{=X@po9`C;Xsy0dCeKT$g13uui+5 z0{puM;jR|cUB@?HjlbPHOP;@U{EOm-yBIgK!q+d^|FClJUt#>_!rsi?U8j_P7-95J z-TpMeeD`E;CZujp^Iu|r>h)Jyz`M?GhLx{#T0cxN{^!pBAj5SRyKy50$qLSTURK|Fca-~JC(R-+UE diff --git a/forge-port-api/gradle/wrapper/gradle-wrapper.properties b/forge-port-api/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 66cd5a0..0000000 --- a/forge-port-api/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-all.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/forge-port-api/gradlew b/forge-port-api/gradlew deleted file mode 100755 index adff685..0000000 --- a/forge-port-api/gradlew +++ /dev/null @@ -1,248 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/forge-port-api/gradlew.bat b/forge-port-api/gradlew.bat deleted file mode 100644 index c4bdd3a..0000000 --- a/forge-port-api/gradlew.bat +++ /dev/null @@ -1,93 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/forge-port-api/settings.gradle b/forge-port-api/settings.gradle deleted file mode 100644 index 950bb18..0000000 --- a/forge-port-api/settings.gradle +++ /dev/null @@ -1,13 +0,0 @@ -pluginManagement { - repositories { - gradlePluginPortal() - maven { url = 'https://maven.neoforged.net/releases' } - mavenCentral() - } -} - -plugins { - id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' -} - -rootProject.name = 'reiparticlesapi-neoforge' diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java deleted file mode 100644 index b34a32a..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java +++ /dev/null @@ -1,145 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi; - -import com.reiasu.reiparticlesapi.event.ReiEventBus; -import com.reiasu.reiparticlesapi.event.api.ReiEvent; -import com.reiasu.reiparticlesapi.network.particle.emitters.ParticleEmittersManager; -import com.reiasu.reiparticlesapi.scheduler.ReiScheduler; -import com.reiasu.reiparticlesapi.test.SimpleTestGroupBuilder; -import com.reiasu.reiparticlesapi.test.TestManager; -import com.mojang.logging.LogUtils; -import net.minecraft.server.level.ServerPlayer; -import org.slf4j.Logger; - - -/** - * Main entry point for the ReiParticles API. - *

- * Provides lifecycle management (initialization, scanner loading, hook registration), - * a {@link com.reiasu.reiparticlesapi.scheduler.ReiScheduler ReiScheduler} for deferred tasks, - * and convenience methods for the {@link com.reiasu.reiparticlesapi.event.ReiEventBus ReiEventBus} - * event system. - *

- * Typical mod integration: - *

{@code
- * // During mod construction
- * ReiParticlesAPI.init();
- *
- * // Register event listener packages (scanned via ClassGraph)
- * ReiParticlesAPI.INSTANCE.appendEventListenerTarget("mymod", "com.example.mymod.listeners");
- * ReiParticlesAPI.INSTANCE.initEventListeners();
- *
- * // Schedule a deferred task (20 ticks = 1 second)
- * ReiParticlesAPI.reiScheduler().runTask(20, () -> { ... });
- * }
- */ -public final class ReiParticlesAPI { - public static final ReiParticlesAPI INSTANCE = new ReiParticlesAPI(); - private static final Logger LOGGER = LogUtils.getLogger(); - private static boolean initialized; - private static boolean scannersLoaded; - private static boolean testHooksRegistered; - - private ReiParticlesAPI() { - } - - /** Initializes the API. Safe to call multiple times; only the first call takes effect. */ - public static void init() { - if (initialized) { - LOGGER.debug("init() called again — already initialized, skipping"); - return; - } - initialized = true; - ParticleEmittersManager.registerBuiltinCodecs(); - LOGGER.info("ReiParticlesAPI init completed"); - } - - /** Returns {@code true} if {@link #init()} has been called. */ - public static boolean isInitialized() { - return initialized; - } - - /** Scans and initializes event listener packages. Call once after all listener targets are registered. */ - public void loadScannerPackages() { - if (scannersLoaded) { - LOGGER.debug("loadScannerPackages() called again — already loaded, skipping"); - return; - } - scannersLoaded = true; - if (!initialized) { - LOGGER.warn("loadScannerPackages() called before init() — call init() first"); - } - LOGGER.info("ReiParticlesAPI scanner packages loaded"); - ReiEventBus.INSTANCE.initListeners(); - } - - public boolean scannersLoaded() { - return scannersLoaded; - } - - public void registerTest() { - if (testHooksRegistered) return; - testHooksRegistered = true; - TestManager.INSTANCE.register("api-test-group-builder", user -> buildSmokeTestGroup(user)); - LOGGER.info("ReiParticlesAPI test hooks registered"); - } - - public boolean testHooksRegistered() { - return testHooksRegistered; - } - - /** - * Registers a package for {@link com.reiasu.reiparticlesapi.annotations.events.EventListener @EventListener} - * class scanning. The package is scanned via ClassGraph when {@link #initEventListeners()} is called. - * - * @param modId the mod identifier - * @param packageName fully-qualified package name to scan (e.g. {@code "com.example.mymod.listeners"}) - */ - public void appendEventListenerTarget(String modId, String packageName) { - ReiEventBus.INSTANCE.appendListenerTarget(modId, packageName); - } - - /** Initializes all registered event listeners. Call after all targets have been appended. */ - public void initEventListeners() { - if (!scannersLoaded) { - LOGGER.debug("initEventListeners() called before loadScannerPackages() — Forge scanning is a no-op, listeners must be registered explicitly"); - } - ReiEventBus.INSTANCE.initListeners(); - } - - /** - * Manually registers a single event listener instance. - * - * @param modId the mod identifier - * @param listener the listener object (must have methods annotated with event handler annotations) - */ - public void registerEventListener(String modId, Object listener) { - ReiEventBus.INSTANCE.registerListenerInstance(modId, listener); - } - - /** - * Fires an event through the {@link com.reiasu.reiparticlesapi.event.ReiEventBus ReiEventBus}. - * - * @param event the event to dispatch - * @param event type - * @return the same event instance (may have been modified by listeners) - */ - public T callEvent(T event) { - return ReiEventBus.call(event); - } - - /** - * Returns the primary scheduler. Supports one-shot, repeating, max-tick, - * cancel predicates, and finish callbacks. Ticked on both server and client. - * - * @see com.reiasu.reiparticlesapi.scheduler.ReiScheduler - */ - public static ReiScheduler reiScheduler() { - return ReiScheduler.INSTANCE; - } - - private static SimpleTestGroupBuilder buildSmokeTestGroup(ServerPlayer user) { - return new SimpleTestGroupBuilder("api-test-group-builder", user); - } -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/CodecField.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/CodecField.java deleted file mode 100644 index 0a8eb9d..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/CodecField.java +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Marks a field for inclusion in automatic codec serialization/deserialization. - *

- * Fields are serialized in ascending {@link #index()} order. Two fields with the - * same index fall back to declaration order (which is JVM-dependent and fragile). - * Always assign explicit indices when wire compatibility matters. - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface CodecField { - /** - * Explicit serialization order index. Lower values are encoded first. - * Default {@code 0} — fields sharing the same index are sorted by name as a fallback. - */ - int index() default 0; -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/Barrage.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/Barrage.java deleted file mode 100644 index 32c0210..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/Barrage.java +++ /dev/null @@ -1,103 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.barrages; - -import com.reiasu.reiparticlesapi.network.particle.ServerController; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.phys.Vec3; -import net.minecraft.server.level.ServerLevel; - -import javax.annotation.Nullable; -import java.util.UUID; - -/** - * A projectile-like entity that travels in a direction, detects hits against - * blocks, entities, and other barrages, and can pass through targets. - *

- * Implementations should use {@link AbstractBarrage} as a base class. - */ -public interface Barrage { - - /** - * Current world position. - */ - Vec3 getLoc(); - - void setLoc(Vec3 loc); - - /** - * The server world this barrage exists in. - */ - ServerLevel getWorld(); - - /** - * The axis-aligned hit box for collision detection. - */ - HitBox getHitBox(); - - void setHitBox(HitBox hitBox); - - /** - * The entity that shot this barrage (may be null). - */ - @Nullable - LivingEntity getShooter(); - - void setShooter(@Nullable LivingEntity shooter); - - /** - * The movement direction vector. - */ - Vec3 getDirection(); - - void setDirection(Vec3 direction); - - /** - * Whether this barrage has been launched (is actively ticking/moving). - */ - boolean getLaunch(); - - void setLaunch(boolean launch); - - /** - * Whether this barrage is still valid (not yet removed). - */ - boolean getValid(); - - /** - * Barrage configuration options. - */ - BarrageOption getOptions(); - - /** - * Unique identifier for this barrage instance. - */ - UUID getUuid(); - - /** - * The server-side particle/display controller bound to this barrage. - */ - ServerController getBindControl(); - - /** - * Called when a hit is detected. Implementations should invoke - * {@link #onHit(BarrageHitResult)} then handle removal/pass-through logic. - */ - void hit(BarrageHitResult result); - - /** - * User-overridable callback when a hit occurs. - */ - void onHit(BarrageHitResult result); - - /** - * Whether this barrage currently ignores collisions - * (e.g. during initial no-hitbox grace period). - */ - boolean noclip(); - - /** - * Called each server tick to update position, detect hits, etc. - */ - void tick(); -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/display/ReiRenderTypesProvider.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/display/ReiRenderTypesProvider.java deleted file mode 100644 index a91fc63..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/display/ReiRenderTypesProvider.java +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.display; - -import net.minecraft.client.renderer.RenderType; - -/** - * Provider interface for custom glow render types used by display entities. - */ -public interface ReiRenderTypesProvider { - /** - * Return the glow {@link RenderType} for rendering display entities with bloom/glow effects. - * - * @return a RenderType configured for glow rendering - */ - RenderType glow(); -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/BlockPosExtendsKt.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/BlockPosExtendsKt.java deleted file mode 100644 index 115fe08..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/BlockPosExtendsKt.java +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.extend; - -import net.minecraft.core.BlockPos; -import net.minecraft.world.phys.Vec3; - -/** - * Extension utility for {@link BlockPos} providing conversion from {@link Vec3}. - * Originally a Kotlin extension function, ported as a static utility method. - */ -public final class BlockPosExtendsKt { - - private BlockPosExtendsKt() { - } - - /** - * Returns the {@link BlockPos} containing the given {@link Vec3} position - * (equivalent to flooring each component). - */ - public static BlockPos ofFloored(Vec3 vec) { - return BlockPos.containing(vec.x, vec.y, vec.z); - } -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/PathMotion.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/PathMotion.java deleted file mode 100644 index e64e533..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/PathMotion.java +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.network.animation.api; - -import net.minecraft.world.phys.Vec3; - -/** - * Interface defining path-based motion for particle entities. - * Implementations compute per-tick offsets from an origin, and apply - * the resulting world position to their target. - */ -public interface PathMotion { - int getCurrentTick(); - - void setCurrentTick(int tick); - - Vec3 getOrigin(); - - void setOrigin(Vec3 origin); - - /** - * Apply the computed world position to the motion target - * (e.g. teleport a style/emitter to this position). - */ - void apply(Vec3 actualPos); - - /** - * Compute and return the next path offset from origin. - * This also advances the internal tick counter. - */ - Vec3 next(); - - /** - * Check whether the motion target is still alive/valid. - * Returns false if the target has been removed or cancelled. - */ - boolean checkValid(); -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeDataKt.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeDataKt.java deleted file mode 100644 index 8f61d96..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeDataKt.java +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.network.particle.data; - -/** - * Utility methods for {@link IntRangeData}, ported from Kotlin extension functions. - */ -public final class IntRangeDataKt { - - private IntRangeDataKt() { - } - - /** - * Checks whether the given integer falls within the range (inclusive on both ends). - */ - public static boolean isIn(int value, IntRangeData range) { - return value >= range.getMin() && value <= range.getMax(); - } - - /** - * Creates an {@link IntRangeData} where the receiver is the min. - */ - public static IntRangeData minRangeTo(int min, int max) { - return new IntRangeData(min, max); - } - - /** - * Creates an {@link IntRangeData} where the receiver is the max. - */ - public static IntRangeData maxRangeTo(int max, int min) { - return new IntRangeData(min, max); - } -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/SerializableData.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/SerializableData.java deleted file mode 100644 index 6393038..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/SerializableData.java +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.network.particle.data; - -import com.reiasu.reiparticlesapi.particles.ParticleDisplayer; - -/** - * Marker interface for data objects that can be network-serialized and - * used to create a {@link ParticleDisplayer} on the client side. - *

- * Forge port note: the original Fabric {@code getCodec()} returned a - * StreamCodec for network serialization. In the Forge port, serialization - * is handled at a higher level using FriendlyByteBuf directly, so the - * codec method is omitted. Implementations should still support - * clone and createDisplayer. - */ -public interface SerializableData { - - /** - * Returns a deep copy of this data. - */ - SerializableData clone(); - - /** - * Creates a {@link ParticleDisplayer} that renders the particle - * described by this data. - */ - ParticleDisplayer createDisplayer(); -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleDataFactory.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleDataFactory.java deleted file mode 100644 index 79b20fd..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleDataFactory.java +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.network.particle.emitters; - -/** - * Factory interface for creating {@link ControllableParticleData} instances. - *

- * Used by emitter implementations to produce the initial per-particle data - * when spawning new particles each tick. - */ -@FunctionalInterface -public interface ParticleDataFactory { - - /** - * Creates a new {@link ControllableParticleData} with default values. - */ - ControllableParticleData create(); -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/PhysicConstant.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/PhysicConstant.java deleted file mode 100644 index 952fcd6..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/PhysicConstant.java +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.network.particle.emitters; - -/** - * Physics constants used by particle emitter simulations. - * Values are tuned for Minecraft's coordinate and tick system. - */ -public final class PhysicConstant { - public static final PhysicConstant INSTANCE = new PhysicConstant(); - - /** Gravity acceleration per tick (blocks/tick^2). Minecraft default ~0.05 */ - public static final double EARTH_GRAVITY = 0.05; - - /** Sea-level air density (kg/m^3) */ - public static final double SEA_AIR_DENSITY = 1.225; - - /** Drag coefficient for particle air resistance */ - public static final double DRAG_COEFFICIENT = 0.01; - - /** Cross-sectional area for drag calculations */ - public static final double CROSS_SECTIONAL_AREA = 0.01; - - private PhysicConstant() { - } -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommand.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommand.java deleted file mode 100644 index 2866a7d..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommand.java +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.network.particle.emitters.command; - -import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; -import com.reiasu.reiparticlesapi.particles.ControllableParticle; - -/** - * A command that mutates particle state during the emitter tick loop. - */ -@FunctionalInterface -public interface ParticleCommand { - - /** - * Execute this command against the given particle data and particle instance. - * - * @param data the mutable particle data - * @param particle the particle instance - */ - void execute(ControllableParticleData data, ControllableParticle particle); -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirection.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirection.java deleted file mode 100644 index 56050f9..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirection.java +++ /dev/null @@ -1,69 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.network.particle.emitters.environment.wind; - -import com.reiasu.reiparticlesapi.network.particle.emitters.ParticleEmitters; -import net.minecraft.world.phys.Vec3; - -/** - * Defines a wind effect that applies directional force to particles within an emitter. - *

- * Wind can be absolute (fixed direction) or relative to the emitter position. - * The {@code windSpeedExpress} field allows configuring wind strength; in the original - * Fabric version this was a math expression with variable {@code l} (distance), - * but in the Forge port it is parsed as a constant double for simplicity. - *

- * Forge port note: {@code getCodec()} from Fabric StreamCodec is omitted. - */ -public interface WindDirection { - - /** - * The base wind direction vector. - */ - Vec3 getDirection(); - - void setDirection(Vec3 direction); - - /** - * Whether wind is relative to the emitter position (true) or absolute (false). - */ - boolean getRelative(); - - void setRelative(boolean relative); - - /** - * Wind speed expression string. Parsed as a constant double in Forge port. - * In Fabric, this was a math expression with variable {@code l} = distance. - */ - String getWindSpeedExpress(); - - void setWindSpeedExpress(String express); - - /** - * Bind this wind direction to an emitter instance for relative calculations. - */ - WindDirection loadEmitters(ParticleEmitters emitters); - - /** - * Whether an emitter has been bound. - */ - boolean hasLoadedEmitters(); - - /** - * Unique string identifier for this wind type. - */ - String getID(); - - /** - * Compute the wind vector at a given particle position. - * - * @param particlePos the particle's current world position - * @return the wind force vector - */ - Vec3 getWind(Vec3 particlePos); - - /** - * Check whether the given position is within this wind's area of effect. - */ - boolean inRange(Vec3 pos); -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEvent.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEvent.java deleted file mode 100644 index 259e1de..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEvent.java +++ /dev/null @@ -1,47 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.network.particle.emitters.event; - -import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; -import com.reiasu.reiparticlesapi.particles.ControllableParticle; - -/** - * Base interface for particle-level events fired during emitter simulation. - */ -public interface ParticleEvent { - - /** - * Returns the unique string identifier for this event type. - */ - String getEventID(); - - /** - * Gets the particle instance. - */ - ControllableParticle getParticle(); - - /** - * Sets the particle instance. - */ - void setParticle(ControllableParticle particle); - - /** - * Gets the particle's mutable data. - */ - ControllableParticleData getParticleData(); - - /** - * Sets the particle's mutable data. - */ - void setParticleData(ControllableParticleData data); - - /** - * Whether this event has been canceled by a handler. - */ - boolean getCanceled(); - - /** - * Cancel or un-cancel this event. - */ - void setCanceled(boolean canceled); -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandler.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandler.java deleted file mode 100644 index c857ea6..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandler.java +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.network.particle.emitters.event; - -/** - * A handler that reacts to a specific {@link ParticleEvent} type. - * Handlers are ordered by priority (lower priority value = executed first). - */ -public interface ParticleEventHandler extends Comparable { - - /** - * Process the given event. May mutate event state or cancel it. - */ - void handle(ParticleEvent event); - - /** - * The event ID this handler targets (must match {@link ParticleEvent#getEventID()}). - */ - String getTargetEventID(); - - /** - * Unique identifier for this handler instance. - */ - String getHandlerID(); - - /** - * Execution priority. Lower values run first. - */ - int getPriority(); - - @Override - default int compareTo(ParticleEventHandler other) { - return this.getPriority() - other.getPriority(); - } -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandlerManager.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandlerManager.java deleted file mode 100644 index b80b6c2..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandlerManager.java +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.network.particle.emitters.event; - -import java.util.HashMap; -import java.util.Map; - -/** - * Singleton registry for {@link ParticleEventHandler} instances. - *

- * Forge port note: The Fabric version used {@code ReiAPIScanner} for classpath-scanning - * auto-registration. In the Forge port, handlers must be registered explicitly via - * {@link #register(ParticleEventHandler)}. - */ -public final class ParticleEventHandlerManager { - - public static final ParticleEventHandlerManager INSTANCE = new ParticleEventHandlerManager(); - - private final Map registerHandlers = new HashMap<>(); - - private ParticleEventHandlerManager() { - } - - /** - * Look up a handler by its handler ID. - */ - public ParticleEventHandler getHandlerById(String id) { - return registerHandlers.get(id); - } - - /** - * Register a handler. Replaces any existing handler with the same ID. - */ - public void register(ParticleEventHandler handler) { - registerHandlers.put(handler.getHandlerID(), handler); - } - - /** - * Check whether a handler with the given ID is already registered. - */ - public boolean hasRegister(String id) { - return registerHandlers.containsKey(id); - } - - /** - * Called during mod init. In the Forge port this is a no-op; - * handlers should register themselves explicitly. - */ - public void init() { - // Fabric version used ReiAPIScanner for auto-registration. - // Forge port: register handlers explicitly or use Forge event bus. - } -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootType.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootType.java deleted file mode 100644 index fac8214..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootType.java +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.network.particle.emitters.type; - -import net.minecraft.world.phys.Vec3; - -import java.util.List; - -/** - * Defines how particles are spatially distributed when an emitter fires. - *

- * Each implementation produces a list of spawn positions relative to the emitter origin - * and computes a default direction vector for each particle. - *

- * Forge port note: {@code getCodec()} from Fabric StreamCodec is omitted; - * Forge networking uses FriendlyByteBuf directly where needed. - */ -public interface EmittersShootType { - - /** - * Returns the unique string identifier for this shoot type (e.g. "point", "line"). - */ - String getID(); - - /** - * Computes the list of spawn positions for a batch of particles. - * - * @param origin the emitter world position - * @param tick the current emitter tick - * @param count the number of particles to produce - * @return list of world-space spawn positions (size == count) - */ - List getPositions(Vec3 origin, int tick, int count); - - /** - * Computes the default movement direction for a particle. - * - * @param enter the emitter's base direction vector (may be zero) - * @param tick the current emitter tick - * @param pos the individual particle spawn position - * @param origin the emitter world position - * @return the direction vector for the particle - */ - Vec3 getDefaultDirection(Vec3 enter, int tick, Vec3 pos, Vec3 origin); -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/Controllable.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/Controllable.java deleted file mode 100644 index 9fea7de..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/Controllable.java +++ /dev/null @@ -1,91 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.particles; - -import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; -import com.reiasu.reiparticlesapi.utils.RelativeLocation; -import net.minecraft.world.phys.Vec3; - -import java.util.Map; -import java.util.UUID; - -/** - * Base interface for objects that can be remotely controlled (particles, compositions, etc.). - * - * @param the type of the underlying controlled object - */ -public interface Controllable { - - /** - * The unique control UUID for this controllable. - */ - UUID controlUUID(); - - /** - * Rotate this controllable to face the given point. - */ - void rotateToPoint(RelativeLocation to); - - /** - * Rotate this controllable to face the given point with an additional angle offset. - */ - void rotateToWithAngle(RelativeLocation to, double radian); - - /** - * Rotate this controllable around its axis by the given angle. - */ - void rotateAsAxis(double radian); - - /** - * Teleport this controllable to the given position. - */ - void teleportTo(Vec3 pos); - - /** - * Teleport this controllable to the given coordinates. - */ - void teleportTo(double x, double y, double z); - - /** - * Remove/destroy this controllable. - */ - void remove(); - - /** - * Get the underlying controlled object. - */ - T getControlObject(); - - /** - * Get the controlled object cast to type S. - */ - @SuppressWarnings("unchecked") - default S getControlCasted() { - return (S) getControlObject(); - } - - /** - * Get the controlled object cast to type S, or null if the cast fails. - */ - @SuppressWarnings("unchecked") - default S getControlCastedOrNull() { - try { - return (S) getControlObject(); - } catch (Exception e) { - return null; - } - } - - // ---- Buffer-based load/change (used by composition system) ---- - - default void load(Map> args) { - } - - default Map> toArgs() { - return Map.of(); - } - - default void change(Map> args) { - load(args); - } -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleLerpInterpolator.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleLerpInterpolator.java deleted file mode 100644 index 4d4920a..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleLerpInterpolator.java +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.particles; - -import net.minecraft.world.phys.Vec3; - -/** - * Interpolator for particle position lerping between ticks. - */ -public interface ParticleLerpInterpolator { - /** - * Compute an interpolated position between previous and current tick positions. - * - * @param prev the position at the previous tick - * @param current the position at the current tick - * @param delta the partial-tick fraction (0..1) - * @return the interpolated position - */ - Vec3 consume(Vec3 prev, Vec3 current, float delta); -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlParticleManager.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlParticleManager.java deleted file mode 100644 index 5bb6dee..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlParticleManager.java +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.particles.control; - -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -/** - * Manages the mapping between control UUIDs and their {@link ParticleController} instances. - *

- * Each controlled particle gets a UUID; the manager stores and retrieves the - * corresponding controller so the particle can be mutated from server-driven - * commands. - */ -public final class ControlParticleManager { - - public static final ControlParticleManager INSTANCE = new ControlParticleManager(); - - private final ConcurrentHashMap controls = new ConcurrentHashMap<>(); - - private ControlParticleManager() { - } - - /** - * Look up a controller by UUID. Returns {@code null} if none is registered. - */ - public ParticleController getControl(UUID uuid) { - return controls.get(uuid); - } - - /** - * Remove a controller by UUID. - */ - public void removeControl(UUID uuid) { - controls.remove(uuid); - } - - /** - * Create a new controller for the given UUID and register it. - * - * @param uuid the control UUID - * @return the newly created controller - */ - public ParticleController createControl(UUID uuid) { - ParticleController controller = new ParticleController(uuid); - controls.put(uuid, controller); - return controller; - } -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroupProvider.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroupProvider.java deleted file mode 100644 index ff43293..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroupProvider.java +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.particles.control.group; - -import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; - -import java.util.Map; -import java.util.UUID; - -/** - * Provider (factory) for creating and modifying {@link ControllableParticleGroup} instances. - *

- * Registered with {@link ClientParticleGroupManager} for client-side group creation - * when receiving server-side packets. - * - * @deprecated Use ParticleGroupStyle instead. - */ -@Deprecated -public interface ControllableParticleGroupProvider { - - /** - * Create a new particle group with the given UUID and initialization args. - */ - ControllableParticleGroup createGroup(UUID uuid, Map> args); - - /** - * Apply changes to an existing group with the given args. - */ - void changeGroup(ControllableParticleGroup group, Map> args); -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java deleted file mode 100644 index 446c622..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java +++ /dev/null @@ -1,79 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.utils; - -import net.minecraft.world.phys.Vec3; - -public final class GraphMathHelper { - private GraphMathHelper() { - } - - public static float lerp(float alpha, float from, float to) { - return from + (to - from) * alpha; - } - - public static double lerp(double alpha, double from, double to) { - return from + (to - from) * alpha; - } - - /** - * Linearly interpolate between two {@link Vec3} positions. - * - * @param alpha interpolation factor (0 = from, 1 = to) - * @param from start position - * @param to end position - * @return interpolated position - */ - public static Vec3 lerp(float alpha, Vec3 from, Vec3 to) { - return new Vec3( - lerp((double) alpha, from.x, to.x), - lerp((double) alpha, from.y, to.y), - lerp((double) alpha, from.z, to.z) - ); - } - - public static double inverseLerp(double value, double min, double max) { - if (max == min) { - return 0.0; - } - return (value - min) / (max - min); - } - - public static double smoothstep(double edge0, double edge1, double x) { - double t = Math.clamp(inverseLerp(x, edge0, edge1), 0.0, 1.0); - return t * t * (3.0 - 2.0 * t); - } - - /** - * Inverse-power distance falloff. Returns a value in [0, 1] that decreases - * with distance according to {@code 1 / (1 + (dist/range)^power)}. - *

- * When {@code dist == 0}, returns 1.0. When {@code dist == range}, returns 0.5 - * for {@code power == 1}. - * - * @param dist the distance from the source - * @param range the characteristic range (half-strength distance at power=1) - * @param power the falloff exponent (higher = steeper) - * @return falloff factor in [0, 1] - */ - public static double inversePowerFalloff(double dist, double range, double power) { - if (range <= 0.0) { - return 0.0; - } - double ratio = dist / range; - return 1.0 / (1.0 + Math.pow(ratio, power)); - } - - /** - * Exponential damping factor for velocity drag. - * Returns {@code exp(-damping * dt)}, clamped to [0, 1]. - * - * @param damping the damping coefficient (higher = more drag) - * @param dt the time step - * @return multiplicative factor in [0, 1] - */ - public static double expDampFactor(double damping, double dt) { - double factor = Math.exp(-damping * dt); - return Math.max(0.0, Math.min(1.0, factor)); - } -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ReflectUtil.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ReflectUtil.java deleted file mode 100644 index 6debd4d..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ReflectUtil.java +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.utils; - -import com.mojang.logging.LogUtils; -import org.slf4j.Logger; - -import java.util.function.Supplier; - -/** - * Reflection and timing utilities. - *

- * Provides class references for common Minecraft types (useful for reflection-based - * annotation processing) and timed execution helpers that log elapsed time - * to the mod logger. - */ -public final class ReflectUtil { - - private static final Logger LOGGER = LogUtils.getLogger(); - - private ReflectUtil() { - } - - /** - * Runs a {@link Runnable} and logs the elapsed time in milliseconds. - * - * @param name the operation name for logging - * @param invoker the code to run - */ - public static void infoTimeWith(String name, Runnable invoker) { - long start = System.currentTimeMillis(); - invoker.run(); - long end = System.currentTimeMillis(); - LOGGER.info("Executed " + name + " completed: took " + (end - start) + "ms"); - } - - /** - * Overload with default empty name. - */ - public static void infoTimeWith(Runnable invoker) { - infoTimeWith("", invoker); - } - - /** - * Runs a {@link Supplier} and logs the elapsed time, returning the result. - * - * @param name the operation name for logging - * @param invoker the code to run - * @param return type - * @return the result of the supplier - */ - public static T infoTimeCallable(String name, Supplier invoker) { - long start = System.currentTimeMillis(); - T result = invoker.get(); - long end = System.currentTimeMillis(); - LOGGER.info("Executed and returned " + name + " completed: took " + (end - start) + "ms"); - return result; - } - - /** - * Overload with default empty name. - */ - public static T infoTimeCallable(Supplier invoker) { - return infoTimeCallable("", invoker); - } -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/api/ModelPartPointCollector.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/api/ModelPartPointCollector.java deleted file mode 100644 index a44efde..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/api/ModelPartPointCollector.java +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.utils.api; - -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.model.geom.ModelPart; -import net.minecraft.world.phys.Vec3; - -import java.util.List; - -/** - * Collects sample points from a {@link ModelPart} hierarchy for particle placement. - *

- * Implementations walk the model-part tree and emit world-space positions - * that can be used to spawn particles along the model's surface. - */ -public interface ModelPartPointCollector { - /** - * Collect sample points from the given model-part tree. - * - * @param root the root model part - * @param poseStack the current pose stack (transformations applied to the model) - * @param density how many sample points to generate (higher = denser) - * @param pixelToUnit whether to convert pixel coordinates to unit (1/16) scale - * @return a list of sample positions in model-local space - */ - List collectSamplePoints(ModelPart root, PoseStack poseStack, int density, boolean pixelToUnit); - - /** - * Convenience overload with {@code pixelToUnit} defaulting to {@code true}. - */ - default List collectSamplePoints(ModelPart root, PoseStack poseStack, int density) { - return collectSamplePoints(root, poseStack, density, true); - } -} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/emitters/LinearResistanceHelper.java b/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/emitters/LinearResistanceHelper.java deleted file mode 100644 index 0947818..0000000 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/emitters/LinearResistanceHelper.java +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu -package com.reiasu.reiparticlesapi.utils.helper.emitters; - -import net.minecraft.world.phys.Vec3; - -/** - * Utility for applying linear resistance (velocity scaling) to emitter motion. - */ -public final class LinearResistanceHelper { - public static final LinearResistanceHelper INSTANCE = new LinearResistanceHelper(); - - private LinearResistanceHelper() { - } - - /** - * Scale the velocity vector by a percentage factor. - * - * @param enter the current velocity - * @param percent the scaling factor (e.g. 0.95 for 5% deceleration per tick) - * @return the scaled velocity - */ - public Vec3 setPercentageVelocity(Vec3 enter, double percent) { - return enter.scale(percent); - } -} diff --git a/forge-port-api/src/main/resources/META-INF/neoforge.mods.toml b/forge-port-api/src/main/resources/META-INF/neoforge.mods.toml deleted file mode 100644 index 3b704d7..0000000 --- a/forge-port-api/src/main/resources/META-INF/neoforge.mods.toml +++ /dev/null @@ -1,28 +0,0 @@ -modLoader="javafml" -loaderVersion="${loader_version_range}" -license="${mod_license}" - -[[mods]] -modId="${mod_id}" -version="${mod_version}" -displayName="${mod_name}" -displayTest="IGNORE_ALL_VERSION" -authors="Reiasu" -description=''' -ReiParticlesAPI runtime for NeoForge 1.21.x. -Includes animation, emitter, display and test lifecycle services used by ReiParticleSkill. -''' - -[[dependencies.${mod_id}]] -modId="neoforge" -type="required" -versionRange="${neo_version_range}" -ordering="NONE" -side="BOTH" - -[[dependencies.${mod_id}]] -modId="minecraft" -type="required" -versionRange="${minecraft_version_range}" -ordering="NONE" -side="BOTH" diff --git a/forge-port-api/src/main/resources/pack.mcmeta b/forge-port-api/src/main/resources/pack.mcmeta deleted file mode 100644 index 73613b9..0000000 --- a/forge-port-api/src/main/resources/pack.mcmeta +++ /dev/null @@ -1,6 +0,0 @@ -{ - "pack": { - "pack_format": 15, - "description": "ReiParticlesAPI resources" - } -} \ No newline at end of file diff --git a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/ReiParticlesAPISchedulerTest.java b/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/ReiParticlesAPISchedulerTest.java deleted file mode 100644 index f1a2076..0000000 --- a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/ReiParticlesAPISchedulerTest.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2025 Reiasu - * - * This file is part of ReiParticlesAPI. - * - * ReiParticlesAPI is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3 of the License. - * - * ReiParticlesAPI is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ReiParticlesAPI. If not, see . - */ -// SPDX-License-Identifier: LGPL-3.0-only -package com.reiasu.reiparticlesapi; - -import com.reiasu.reiparticlesapi.scheduler.ReiScheduler; -import org.junit.jupiter.api.Test; - -import java.util.concurrent.atomic.AtomicBoolean; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - -class ReiParticlesAPISchedulerTest { - - private ReiScheduler scheduler() { - return ReiScheduler.INSTANCE; - } - - @Test - void shouldExecuteScheduledTask() { - ReiScheduler scheduler = scheduler(); - AtomicBoolean executed = new AtomicBoolean(false); - - scheduler.runTask(1, () -> executed.set(true)); - - // tick 1: currentTick becomes 1, delay is 1 → should fire - scheduler.doTick(); - assertTrue(executed.get()); - } - - @Test - void shouldExecuteWhenTickIsZero() { - ReiScheduler scheduler = scheduler(); - AtomicBoolean executed = new AtomicBoolean(false); - - // runTask(0) clamps to 1, so delay = 1 - scheduler.runTask(0, () -> executed.set(true)); - - // Before tick: not yet executed - assertFalse(executed.get()); - // tick 1: should fire - scheduler.doTick(); - assertTrue(executed.get()); - } -} diff --git a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/ReiParticlesAPITest.java b/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/ReiParticlesAPITest.java deleted file mode 100644 index 6fe760f..0000000 --- a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/ReiParticlesAPITest.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2025 Reiasu - * - * This file is part of ReiParticlesAPI. - * - * ReiParticlesAPI is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3 of the License. - * - * ReiParticlesAPI is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ReiParticlesAPI. If not, see . - */ -// SPDX-License-Identifier: LGPL-3.0-only -package com.reiasu.reiparticlesapi; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertTrue; - -class ReiParticlesAPITest { - @Test - void shouldAllowRepeatedLifecycleCalls() { - assertDoesNotThrow(ReiParticlesAPI::init); - assertDoesNotThrow(ReiParticlesAPI::init); - assertTrue(ReiParticlesAPI.isInitialized()); - - assertDoesNotThrow(() -> ReiParticlesAPI.INSTANCE.loadScannerPackages()); - assertDoesNotThrow(() -> ReiParticlesAPI.INSTANCE.loadScannerPackages()); - assertTrue(ReiParticlesAPI.INSTANCE.scannersLoaded()); - - assertDoesNotThrow(() -> ReiParticlesAPI.INSTANCE.registerTest()); - assertDoesNotThrow(() -> ReiParticlesAPI.INSTANCE.registerTest()); - assertTrue(ReiParticlesAPI.INSTANCE.testHooksRegistered()); - } -} diff --git a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/animation/AnimateRuntimeTest.java b/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/animation/AnimateRuntimeTest.java deleted file mode 100644 index aaac104..0000000 --- a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/animation/AnimateRuntimeTest.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2025 Reiasu - * - * This file is part of ReiParticlesAPI. - * - * ReiParticlesAPI is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3 of the License. - * - * ReiParticlesAPI is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ReiParticlesAPI. If not, see . - */ -// SPDX-License-Identifier: LGPL-3.0-only -package com.reiasu.reiparticlesapi.animation; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -class AnimateRuntimeTest { - @AfterEach - void cleanup() { - AnimateManager.INSTANCE.clear(); - } - - @Test - void shouldDriveAnimateToCompletionByServerTicks() { - CountingAction action = new CountingAction(3); - Animate animate = new Animate().addNode(new AnimateNode().addAction(action)); - - AnimateManager.INSTANCE.displayAnimateServer(animate); - assertEquals(1, AnimateManager.INSTANCE.activeCount()); - - AnimateManager.INSTANCE.tickServer(); - AnimateManager.INSTANCE.tickServer(); - assertEquals(1, AnimateManager.INSTANCE.activeCount()); - - AnimateManager.INSTANCE.tickServer(); - assertEquals(1, AnimateManager.INSTANCE.activeCount()); - AnimateManager.INSTANCE.tickServer(); - assertEquals(0, AnimateManager.INSTANCE.activeCount()); - assertTrue(animate.getDone()); - assertEquals(3, action.ticks); - } - - @Test - void shouldCancelWhenPredicateIsSatisfied() { - CountingAction action = new CountingAction(20); - Animate animate = new Animate() - .addNode(new AnimateNode().addAction(action)) - .addCancelPredicate(a -> action.ticks >= 2); - - AnimateManager.INSTANCE.displayAnimateServer(animate); - AnimateManager.INSTANCE.tickServer(); - AnimateManager.INSTANCE.tickServer(); - AnimateManager.INSTANCE.tickServer(); - - assertTrue(animate.getDone()); - assertEquals(0, AnimateManager.INSTANCE.activeCount()); - assertTrue(action.ticks >= 2); - } - - private static final class CountingAction extends AnimateAction { - private final int maxTicks; - private int ticks; - - private CountingAction(int maxTicks) { - this.maxTicks = maxTicks; - } - - @Override - public boolean checkDone() { - return ticks >= maxTicks; - } - - @Override - public void tick() { - ticks++; - } - - @Override - public void onStart() { - ticks = 0; - } - - @Override - public void onDone() { - } - } -} diff --git a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/display/DisplayEntityManagerTest.java b/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/display/DisplayEntityManagerTest.java deleted file mode 100644 index c3ad21c..0000000 --- a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/display/DisplayEntityManagerTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2025 Reiasu - * - * This file is part of ReiParticlesAPI. - * - * ReiParticlesAPI is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3 of the License. - * - * ReiParticlesAPI is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ReiParticlesAPI. If not, see . - */ -// SPDX-License-Identifier: LGPL-3.0-only -package com.reiasu.reiparticlesapi.display; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class DisplayEntityManagerTest { - @AfterEach - void cleanup() { - DisplayEntityManager.INSTANCE.clear(); - } - - @Test - void shouldTickAndRemoveCanceledDisplays() { - DisplayEntityManager.INSTANCE.spawn(new DebugDisplayEntity(0.0, 64.0, 0.0, "group")); - assertEquals(1, DisplayEntityManager.INSTANCE.activeCount()); - - DisplayEntity entity = DisplayEntityManager.INSTANCE.getDisplays().get(0); - entity.cancel(); - DisplayEntityManager.INSTANCE.tickAll(); - - assertEquals(0, DisplayEntityManager.INSTANCE.activeCount()); - } - - @Test - void shouldIgnoreUnknownDisplayObjects() { - DisplayEntityManager.INSTANCE.spawn("invalid"); - assertEquals(0, DisplayEntityManager.INSTANCE.activeCount()); - } -} diff --git a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/event/ReiEventBusTest.java b/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/event/ReiEventBusTest.java deleted file mode 100644 index 8d06a7a..0000000 --- a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/event/ReiEventBusTest.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (C) 2025 Reiasu - * - * This file is part of ReiParticlesAPI. - * - * ReiParticlesAPI is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3 of the License. - * - * ReiParticlesAPI is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ReiParticlesAPI. If not, see . - */ -// SPDX-License-Identifier: LGPL-3.0-only -package com.reiasu.reiparticlesapi.event; - -import com.reiasu.reiparticlesapi.annotations.events.EventHandler; -import com.reiasu.reiparticlesapi.event.api.ReiEvent; -import com.reiasu.reiparticlesapi.event.api.EventInterruptible; -import com.reiasu.reiparticlesapi.event.api.EventPriority; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Test; - -import java.util.concurrent.atomic.AtomicInteger; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class ReiEventBusTest { - @AfterEach - void clean() { - ReiEventBus.INSTANCE.clear(); - } - - @Test - void shouldDispatchHandlersByPriorityOrder() { - StringBuilder order = new StringBuilder(); - ReiEventBus.INSTANCE.registerListenerInstance("test", new PriorityListener(order)); - - ReiEventBus.call(new BaseEvent()); - - assertEquals("HIGHEST,HIGH,NORMAL,LOW,LOWEST", order.toString()); - } - - @Test - void shouldStopWhenEventIsInterrupted() { - AtomicInteger calls = new AtomicInteger(); - ReiEventBus.INSTANCE.registerListenerInstance("test", new InterruptingListener(calls)); - - ReiEventBus.call(new InterruptEvent()); - - assertEquals(1, calls.get()); - } - - @Test - void shouldDispatchChildThenParentEventHandlers() { - StringBuilder order = new StringBuilder(); - ReiEventBus.INSTANCE.registerListenerInstance("test", new HierarchyListener(order)); - - ReiEventBus.call(new ChildEvent()); - - assertEquals("child,parent", order.toString()); - } - - private static class BaseEvent extends ReiEvent { - } - - private static final class ChildEvent extends BaseEvent { - } - - private static final class InterruptEvent extends ReiEvent implements EventInterruptible { - private boolean interrupted; - - @Override - public boolean isInterrupted() { - return interrupted; - } - - @Override - public void setInterrupted(boolean interrupted) { - this.interrupted = interrupted; - } - } - - private static final class PriorityListener { - private final StringBuilder order; - - private PriorityListener(StringBuilder order) { - this.order = order; - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void highest(BaseEvent event) { - append("HIGHEST"); - } - - @EventHandler(priority = EventPriority.HIGH) - public void high(BaseEvent event) { - append("HIGH"); - } - - @EventHandler(priority = EventPriority.NORMAL) - public void normal(BaseEvent event) { - append("NORMAL"); - } - - @EventHandler(priority = EventPriority.LOW) - public void low(BaseEvent event) { - append("LOW"); - } - - @EventHandler(priority = EventPriority.LOWEST) - public void lowest(BaseEvent event) { - append("LOWEST"); - } - - private void append(String value) { - if (order.length() > 0) { - order.append(','); - } - order.append(value); - } - } - - private static final class InterruptingListener { - private final AtomicInteger calls; - - private InterruptingListener(AtomicInteger calls) { - this.calls = calls; - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void first(InterruptEvent event) { - calls.incrementAndGet(); - event.setInterrupted(true); - } - - @EventHandler(priority = EventPriority.LOWEST) - public void second(InterruptEvent event) { - calls.incrementAndGet(); - } - } - - private static final class HierarchyListener { - private final StringBuilder order; - - private HierarchyListener(StringBuilder order) { - this.order = order; - } - - @EventHandler - public void onChild(ChildEvent event) { - append("child"); - } - - @EventHandler - public void onParent(BaseEvent event) { - append("parent"); - } - - private void append(String value) { - if (order.length() > 0) { - order.append(','); - } - order.append(value); - } - } -} - diff --git a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffersTest.java b/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffersTest.java deleted file mode 100644 index 8e75245..0000000 --- a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffersTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2025 Reiasu - * - * This file is part of ReiParticlesAPI. - * - * ReiParticlesAPI is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3 of the License. - * - * ReiParticlesAPI is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ReiParticlesAPI. If not, see . - */ -// SPDX-License-Identifier: LGPL-3.0-only -package com.reiasu.reiparticlesapi.network.buffer; - -import org.junit.jupiter.api.Test; - -import java.util.UUID; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -class ParticleControllerDataBuffersTest { - @Test - void shouldRoundTripBufferWithEnvelopeEncoding() { - StringControllerBuffer source = ParticleControllerDataBuffers.INSTANCE.string("forge-runtime"); - byte[] encoded = ParticleControllerDataBuffers.INSTANCE.encode(source); - ParticleControllerDataBuffer decoded = ParticleControllerDataBuffers.INSTANCE.decodeToBuffer(encoded); - - assertInstanceOf(StringControllerBuffer.class, decoded); - assertEquals("forge-runtime", decoded.getLoadedValue()); - } - - @Test - void shouldDecodeByBufferId() { - UUID uuid = UUID.randomUUID(); - UUIDControllerBuffer source = ParticleControllerDataBuffers.INSTANCE.uuid(uuid); - - ParticleControllerDataBuffer decoded = - ParticleControllerDataBuffers.INSTANCE.withIdDecode(UUIDControllerBuffer.ID, source.encode()); - - assertNotNull(decoded); - assertEquals(uuid, decoded.getLoadedValue()); - } - - @Test - void shouldResolveWrapperClassToPrimitiveRegistration() { - ParticleControllerDataBuffer buffer = ParticleControllerDataBuffers.INSTANCE.fromBufferType(42, Integer.class); - - assertNotNull(buffer); - assertInstanceOf(IntControllerBuffer.class, buffer); - assertEquals(42, buffer.getLoadedValue()); - } - - @Test - void shouldRoundTripPrimitiveArrays() { - int[] input = new int[]{2, 4, 6, 8}; - IntArrayControllerBuffer source = ParticleControllerDataBuffers.INSTANCE.intArray(input); - - ParticleControllerDataBuffer decoded = - ParticleControllerDataBuffers.INSTANCE.withIdDecode(IntArrayControllerBuffer.ID, source.encode()); - - assertNotNull(decoded); - assertArrayEquals(input, (int[]) decoded.getLoadedValue()); - } -} - diff --git a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacketTest.java b/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacketTest.java deleted file mode 100644 index 01701a1..0000000 --- a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacketTest.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2025 Reiasu - * - * This file is part of ReiParticlesAPI. - * - * ReiParticlesAPI is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3 of the License. - * - * ReiParticlesAPI is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ReiParticlesAPI. If not, see . - */ -// SPDX-License-Identifier: LGPL-3.0-only -package com.reiasu.reiparticlesapi.network.packet; - -import io.netty.buffer.Unpooled; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.phys.Vec3; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class CameraShakeS2CPacketTest { - @Test - void shouldEncodeAndDecodeWithoutLosingData() { - CameraShakeS2CPacket input = new CameraShakeS2CPacket(12.5, new Vec3(1.25, 80.0, -4.5), 0.85, 40); - FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); - - CameraShakeS2CPacket.encode(input, buf); - CameraShakeS2CPacket output = CameraShakeS2CPacket.decode(buf); - - assertEquals(input.range(), output.range()); - assertEquals(input.origin().x, output.origin().x); - assertEquals(input.origin().y, output.origin().y); - assertEquals(input.origin().z, output.origin().z); - assertEquals(input.amplitude(), output.amplitude()); - assertEquals(input.tick(), output.tick()); - } -} diff --git a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManagerTest.java b/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManagerTest.java deleted file mode 100644 index 8da5aa6..0000000 --- a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManagerTest.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2025 Reiasu - * - * This file is part of ReiParticlesAPI. - * - * ReiParticlesAPI is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3 of the License. - * - * ReiParticlesAPI is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ReiParticlesAPI. If not, see . - */ -// SPDX-License-Identifier: LGPL-3.0-only -package com.reiasu.reiparticlesapi.network.particle.emitters; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class ParticleEmittersManagerTest { - @AfterEach - void cleanup() { - ParticleEmittersManager.clear(); - } - - @Test - void shouldTickAndPruneEmittersAtMaxTick() { - CountingEmitter emitter = new CountingEmitter(); - emitter.setMaxTick(3); - ParticleEmittersManager.spawnEmitters(emitter); - - assertEquals(1, ParticleEmittersManager.activeCount()); - - ParticleEmittersManager.tickAll(); - ParticleEmittersManager.tickAll(); - assertEquals(1, ParticleEmittersManager.activeCount()); - - ParticleEmittersManager.tickAll(); - assertEquals(0, ParticleEmittersManager.activeCount()); - assertEquals(3, emitter.emittedTicks); - } - - @Test - void shouldIgnoreNonEmitterObjects() { - ParticleEmittersManager.spawnEmitters("not-an-emitter"); - assertEquals(0, ParticleEmittersManager.activeCount()); - } - - private static final class CountingEmitter extends ParticleEmitters { - private int emittedTicks; - - @Override - protected void emitTick() { - emittedTicks++; - } - } -} diff --git a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/utils/builder/PointsAndFourierBuilderTest.java b/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/utils/builder/PointsAndFourierBuilderTest.java deleted file mode 100644 index 69d4cf2..0000000 --- a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/utils/builder/PointsAndFourierBuilderTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2025 Reiasu - * - * This file is part of ReiParticlesAPI. - * - * ReiParticlesAPI is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3 of the License. - * - * ReiParticlesAPI is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ReiParticlesAPI. If not, see . - */ -// SPDX-License-Identifier: LGPL-3.0-only -package com.reiasu.reiparticlesapi.utils.builder; - -import com.reiasu.reiparticlesapi.utils.RelativeLocation; -import org.junit.jupiter.api.Test; - -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - -final class PointsAndFourierBuilderTest { - @Test - void fourierBuilderKeepsRequestedCount() { - FourierSeriesBuilder builder = new FourierSeriesBuilder() - .count(314) - .scale(0.2857142857142857) - .addFourier(2.0, 4.0) - .addFourier(-5.0, -3.0); - assertEquals(314, builder.build().size()); - } - - @Test - void discreteCircleProducesExpectedSamples() { - PointsBuilder builder = new PointsBuilder() - .addDiscreteCircleXZ(48.0, 200, 8.0); - assertEquals(200, builder.create().size()); - } - - @Test - void createWithStyleDataMapsEachPoint() { - PointsBuilder builder = new PointsBuilder().addCircle(10.0, 32); - Map mapped = builder.createWithStyleData(point -> point.getX() > 0 ? "A" + point.getX() : "B" + point.getZ()); - assertFalse(mapped.isEmpty()); - assertTrue(mapped.values().stream().allMatch(point -> point != null)); - } -} diff --git a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/utils/helper/StyleHelperRuntimeTest.java b/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/utils/helper/StyleHelperRuntimeTest.java deleted file mode 100644 index 394fa88..0000000 --- a/forge-port-api/src/test/java/com/reiasu/reiparticlesapi/utils/helper/StyleHelperRuntimeTest.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2025 Reiasu - * - * This file is part of ReiParticlesAPI. - * - * ReiParticlesAPI is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3 of the License. - * - * ReiParticlesAPI is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ReiParticlesAPI. If not, see . - */ -// SPDX-License-Identifier: LGPL-3.0-only -package com.reiasu.reiparticlesapi.utils.helper; - -import com.reiasu.reiparticlesapi.network.particle.style.ParticleGroupStyle; -import com.reiasu.reiparticlesapi.utils.RelativeLocation; -import com.reiasu.reiparticlesapi.utils.helper.impl.StyleStatusHelper; -import org.junit.jupiter.api.Test; - -import java.util.Collections; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -final class StyleHelperRuntimeTest { - @Test - void statusHelperRemovesStyleAfterClosedInterval() { - ParticleGroupStyle style = new ParticleGroupStyle() { - @Override public Map getCurrentFrames() { return Collections.emptyMap(); } - @Override public void onDisplay() {} - }; - StyleStatusHelper statusHelper = HelperUtil.INSTANCE.styleStatus(3); - statusHelper.loadController(style); - statusHelper.setStatus(StatusHelper.Status.DISABLE); - - style.tick(); - style.tick(); - style.tick(); - - assertTrue(style.getCanceled()); - } - - @Test - void styleScaleHelperMovesScaleForward() { - ParticleGroupStyle style = new ParticleGroupStyle() { - @Override public Map getCurrentFrames() { return Collections.emptyMap(); } - @Override public void onDisplay() {} - }; - ScaleHelper helper = HelperUtil.INSTANCE.scaleStyle(0.1, 1.0, 10); - helper.loadController(style); - helper.doScale(); - helper.doScale(); - helper.doScale(); - - assertTrue(style.getScale() > 0.1); - assertTrue(style.getScale() <= 1.0); - } - - @Test - void bezierScaleHelperProducesBoundedScale() { - ParticleGroupStyle style = new ParticleGroupStyle() { - @Override public Map getCurrentFrames() { return Collections.emptyMap(); } - @Override public void onDisplay() {} - }; - BezierValueScaleHelper helper = HelperUtil.INSTANCE.bezierValueScaleStyle( - 0.01, - 1.0, - 20, - new RelativeLocation(17.0, 1.0, 0.0), - new RelativeLocation(-3.0, 0.0, 0.0) - ); - helper.loadController(style); - for (int i = 0; i < 8; i++) { - helper.doScale(); - } - - assertTrue(style.getScale() >= 0.01); - assertTrue(style.getScale() <= 1.0); - } -} diff --git a/forge-port-api/wrapper-bootstrap.gradle b/forge-port-api/wrapper-bootstrap.gradle deleted file mode 100644 index e2b3c3e..0000000 --- a/forge-port-api/wrapper-bootstrap.gradle +++ /dev/null @@ -1,4 +0,0 @@ -tasks.register('wrapper', Wrapper) { - gradleVersion = '8.10' - distributionType = Wrapper.DistributionType.ALL -} \ No newline at end of file diff --git a/forge-port/build.gradle b/forge-port/build.gradle index 4236441..351e6f8 100644 --- a/forge-port/build.gradle +++ b/forge-port/build.gradle @@ -40,6 +40,9 @@ neoForge { } mods { + "reiparticlesapi" { + sourceSet(sourceSets.main) + } "${mod_id}" { sourceSet(sourceSets.main) } @@ -52,9 +55,9 @@ repositories { } dependencies { - // Resolved via composite build (see settings.gradle includeBuild) - compileOnly 'com.reiasu.reiparticlesapi:reiparticlesapi:1.0-SNAPSHOT-neoforge' - testImplementation 'com.reiasu.reiparticlesapi:reiparticlesapi:1.0-SNAPSHOT-neoforge' + // ClassGraph — runtime classpath scanning (used by ReiAPIScanner) + implementation 'io.github.classgraph:classgraph:4.8.174' + testImplementation platform('org.junit:junit-bom:5.11.4') testImplementation 'org.junit.jupiter:junit-jupiter' } diff --git a/forge-port/settings.gradle b/forge-port/settings.gradle index 7c25b31..6c2e2ec 100644 --- a/forge-port/settings.gradle +++ b/forge-port/settings.gradle @@ -12,9 +12,4 @@ plugins { rootProject.name = 'reiparticleskill-neoforge' -// Composite build: resolve forge-port-api from the sibling project instead of a pre-built jar. -includeBuild('../forge-port-api') { - dependencySubstitution { - substitute module('com.reiasu.reiparticlesapi:reiparticlesapi') using project(':') - } -} +// forge-port-api merged into this module — single jar build diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java new file mode 100644 index 0000000..1a8dd83 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi; + +import net.neoforged.neoforge.common.NeoForge; +import com.reiasu.reiparticlesapi.event.ReiEventBus; +import com.reiasu.reiparticlesapi.event.api.ReiEvent; +import com.reiasu.reiparticlesapi.network.particle.emitters.ParticleEmittersManager; +import com.reiasu.reiparticlesapi.scheduler.ReiScheduler; +import com.reiasu.reiparticlesapi.test.SimpleTestGroupBuilder; +import com.reiasu.reiparticlesapi.test.TestManager; +import net.minecraft.server.level.ServerPlayer; +public final class ReiParticlesAPI { + public static final ReiParticlesAPI INSTANCE = new ReiParticlesAPI(); + private static boolean initialized; + private static boolean scannersLoaded; + private static boolean testHooksRegistered; + + private ReiParticlesAPI() { + } + + public static void init() { + if (initialized) return; + initialized = true; + ParticleEmittersManager.registerBuiltinCodecs(); + } + + public static boolean isInitialized() { + return initialized; + } + + public void loadScannerPackages() { + if (scannersLoaded) return; + scannersLoaded = true; + ReiEventBus.INSTANCE.initListeners(); + } + + public boolean scannersLoaded() { + return scannersLoaded; + } + + public void registerTest() { + if (testHooksRegistered) return; + testHooksRegistered = true; + TestManager.INSTANCE.register("api-test-group-builder", user -> buildSmokeTestGroup(user)); + } + + public boolean testHooksRegistered() { + return testHooksRegistered; + } + + public void appendEventListenerTarget(String modId, String packageName) { + ReiEventBus.INSTANCE.appendListenerTarget(modId, packageName); + } + + public void initEventListeners() { + ReiEventBus.INSTANCE.initListeners(); + } + + public void registerEventListener(String modId, Object listener) { + ReiEventBus.INSTANCE.registerListenerInstance(modId, listener); + } + + public T callEvent(T event) { + return NeoForge.EVENT_BUS.post(event); + } + + public static ReiScheduler reiScheduler() { + return ReiScheduler.INSTANCE; + } + + private static SimpleTestGroupBuilder buildSmokeTestGroup(ServerPlayer user) { + return new SimpleTestGroupBuilder("api-test-group-builder", user); + } +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java similarity index 59% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java index 545e333..53c1fe0 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java @@ -42,24 +42,28 @@ import net.neoforged.neoforge.event.tick.ServerTickEvent; import org.slf4j.Logger; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - @Mod(ReiParticlesAPIForge.MOD_ID) public final class ReiParticlesAPIForge { public static final String MOD_ID = "reiparticlesapi"; private static final Logger LOGGER = LogUtils.getLogger(); + + private record TickHandler(String name, Runnable action) {} + private static final int ERROR_THROTTLE_TICKS = 200; // ~10 seconds at 20 tps + private static final int[] errorCooldowns = new int[32]; // indexed per handler slot + private static int tickCounter; + + private final TickHandler[] clientHandlers; + private final TickHandler[] serverHandlers; public ReiParticlesAPIForge(IEventBus modBus, ModContainer container) { + clientHandlers = buildClientHandlers(); + serverHandlers = buildServerHandlers(serverRef); registerConfig(container); registerTickCallbacks(modBus); registerCommands(); initSystems(modBus); - LOGGER.info("ReiParticlesAPI NeoForge runtime initialized"); + } - - // ---- Lifecycle phases ---- - private void registerConfig(ModContainer container) { container.registerConfig(ModConfig.Type.COMMON, APIConfig.SPEC); } @@ -76,7 +80,7 @@ private void registerTickCallbacks(IEventBus modBus) { }); NeoForge.EVENT_BUS.addListener((ClientTickEvent.Post event) -> onClientEndTick()); NeoForge.EVENT_BUS.addListener((ServerTickEvent.Pre event) -> - ReiEventBus.call(new ServerPreTickEvent(event.getServer()))); + NeoForge.EVENT_BUS.post(new ServerPreTickEvent(event.getServer()))); NeoForge.EVENT_BUS.addListener((ServerTickEvent.Post event) -> onServerEndTick(event.getServer())); } @@ -95,61 +99,70 @@ private void initSystems(IEventBus modBus) { WindDirections.INSTANCE.init(); ControllableParticleEffectManager.INSTANCE.init(); ReiParticlesAPI.init(); - ForgeEventForwarder.init(); ReiParticlesAPI.INSTANCE.loadScannerPackages(); ReiParticlesAPI.INSTANCE.registerTest(); } + private TickHandler[] buildClientHandlers() { + return new TickHandler[] { + new TickHandler("ClientTickEventForwarder", ClientTickEventForwarder::onClientEndTick), + new TickHandler("AnimateManager.client", () -> AnimateManager.INSTANCE.tickClient()), + new TickHandler("ParticleEmittersManager.client", ParticleEmittersManager::tickClient), + new TickHandler("DisplayEntityManager.client", () -> DisplayEntityManager.INSTANCE.tickClient()), + new TickHandler("ParticleCompositionManager.client", () -> ParticleCompositionManager.INSTANCE.tickClient()), + new TickHandler("ParticleStyleManager.client", ParticleStyleManager::doTickClient), + new TickHandler("ClientParticleGroupManager", () -> ClientParticleGroupManager.INSTANCE.doClientTick()), + new TickHandler("ClientRenderEntityManager", () -> ClientRenderEntityManager.INSTANCE.doClientTick()), + new TickHandler("PathMotionManager", () -> PathMotionManager.INSTANCE.tick()), + new TickHandler("ReiScheduler", () -> ReiScheduler.INSTANCE.doTick()), + new TickHandler("ClientCameraUtil", () -> ClientCameraUtil.INSTANCE.tick()), + }; + } - // ---- Tick handlers (each manager wrapped in try-catch) ---- + private TickHandler[] buildServerHandlers(net.minecraft.server.MinecraftServer[] serverRef) { + return new TickHandler[] { + new TickHandler("AnimateManager.server", () -> AnimateManager.INSTANCE.tickServer()), + new TickHandler("ParticleEmittersManager.server", ParticleEmittersManager::tickAll), + new TickHandler("DisplayEntityManager.server", () -> DisplayEntityManager.INSTANCE.tickAll()), + new TickHandler("ParticleCompositionManager.server", () -> ParticleCompositionManager.INSTANCE.tickAll()), + new TickHandler("ParticleStyleManager.server", ParticleStyleManager::doTickServer), + new TickHandler("ServerRenderEntityManager.tick", () -> ServerRenderEntityManager.INSTANCE.tick()), + new TickHandler("ServerRenderEntityManager.upgrade", () -> ServerRenderEntityManager.INSTANCE.upgrade(serverRef[0])), + new TickHandler("TestManager", () -> TestManager.INSTANCE.doTickServer()), + new TickHandler("ReiScheduler.server", () -> ReiScheduler.INSTANCE.doTick()), + new TickHandler("ServerPostTickEvent", () -> NeoForge.EVENT_BUS.post(new ServerPostTickEvent(serverRef[0]))), + }; + } private void onClientEndTick() { - safeTick("ClientTickEventForwarder", ClientTickEventForwarder::onClientEndTick); - safeTick("AnimateManager.client", () -> AnimateManager.INSTANCE.tickClient()); - safeTick("ParticleEmittersManager.client", ParticleEmittersManager::tickClient); - safeTick("DisplayEntityManager.client", () -> DisplayEntityManager.INSTANCE.tickClient()); - safeTick("ParticleCompositionManager.client", () -> ParticleCompositionManager.INSTANCE.tickClient()); - safeTick("ParticleStyleManager.client", ParticleStyleManager::doTickClient); - safeTick("ClientParticleGroupManager", () -> ClientParticleGroupManager.INSTANCE.doClientTick()); - safeTick("ClientRenderEntityManager", () -> ClientRenderEntityManager.INSTANCE.doClientTick()); - safeTick("PathMotionManager", () -> PathMotionManager.INSTANCE.tick()); - safeTick("ReiScheduler", () -> ReiScheduler.INSTANCE.doTick()); - safeTick("ClientCameraUtil", () -> ClientCameraUtil.INSTANCE.tick()); + tickCounter++; + runHandlers(clientHandlers, 0); } private void onServerEndTick(net.minecraft.server.MinecraftServer server) { - safeTick("AnimateManager.server", () -> AnimateManager.INSTANCE.tickServer()); - safeTick("ParticleEmittersManager.server", ParticleEmittersManager::tickAll); - safeTick("DisplayEntityManager.server", () -> DisplayEntityManager.INSTANCE.tickAll()); - safeTick("ParticleCompositionManager.server", () -> ParticleCompositionManager.INSTANCE.tickAll()); - safeTick("ParticleStyleManager.server", ParticleStyleManager::doTickServer); - safeTick("ServerRenderEntityManager.tick", () -> ServerRenderEntityManager.INSTANCE.tick()); - safeTick("ServerRenderEntityManager.upgrade", () -> ServerRenderEntityManager.INSTANCE.upgrade(server)); - safeTick("TestManager", () -> TestManager.INSTANCE.doTickServer()); - safeTick("ReiScheduler.server", () -> ReiScheduler.INSTANCE.doTick()); - safeTick("ServerPostTickEvent", () -> ReiEventBus.call(new ServerPostTickEvent(server))); + serverRef[0] = server; + runHandlers(serverHandlers, clientHandlers.length); } - private static final Map LAST_ERROR_LOG = new ConcurrentHashMap<>(); - private static final long ERROR_LOG_INTERVAL_MS = 10_000L; - - private static void safeTick(String name, Runnable tick) { - try { - tick.run(); - } catch (Exception e) { - long now = System.currentTimeMillis(); - Long last = LAST_ERROR_LOG.get(name); - if (last == null || now - last >= ERROR_LOG_INTERVAL_MS) { - LAST_ERROR_LOG.put(name, now); - LOGGER.warn("Tick handler '{}' threw (throttled to once per {}s):", - name, ERROR_LOG_INTERVAL_MS / 1000, e); + private final net.minecraft.server.MinecraftServer[] serverRef = new net.minecraft.server.MinecraftServer[1]; + + private static void runHandlers(TickHandler[] handlers, int cooldownOffset) { + for (int i = 0; i < handlers.length; i++) { + try { + handlers[i].action.run(); + } catch (Exception e) { + int slot = cooldownOffset + i; + if (errorCooldowns[slot] <= 0) { + errorCooldowns[slot] = ERROR_THROTTLE_TICKS; + LOGGER.warn("Tick handler '{}' threw (throttled to once per ~10s):", + handlers[i].name, e); + } else { + errorCooldowns[slot]--; + } } } } - - // ---- Setup callbacks ---- - private void onClientSetup() { - LOGGER.info("ReiParticlesAPI client setup completed"); + } private void onRegisterParticleProviders(RegisterParticleProvidersEvent event) { @@ -167,6 +180,6 @@ private void onRegisterParticleProviders(RegisterParticleProvidersEvent event) { new ControllableFallingDustParticle.Factory()); event.registerSpriteSet(ReiModParticles.CONTROLLABLE_SPLASH.get(), ControllableSplashParticle.Factory::new); - LOGGER.info("Registered ReiParticlesAPI particle providers (7 types)"); + } } \ No newline at end of file diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesConstants.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesConstants.java similarity index 89% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesConstants.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesConstants.java index 7b3602b..fd9bec7 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesConstants.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesConstants.java @@ -5,9 +5,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -/** - * Shared constants for the ReiParticles API. - */ public final class ReiParticlesConstants { public static final String MOD_ID = "reiparticlesapi"; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/Animate.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/Animate.java similarity index 79% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/Animate.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/Animate.java index b7b5ef8..c1f230a 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/Animate.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/Animate.java @@ -6,24 +6,6 @@ import java.util.List; import java.util.function.Predicate; -/** - * A sequential animation state machine that plays a chain of {@link AnimateNode}s. - *

- * Nodes are added via {@link #addNode(AnimateNode, int)} with an optional interval - * (in ticks) between the current node finishing and the next starting. - * Call {@link #start()} once, then {@link #tick()} every game tick. - *

- * Cancel predicates can abort the entire chain early via - * {@link #addCancelPredicate(java.util.function.Predicate)}. - *

- * Key state accessors: - *

    - *
  • {@link #getTimestamp()} — ticks elapsed since the current node started
  • - *
  • {@link #getCurrentIndex()} — index of the current node in the chain
  • - *
  • {@link #getDone()} — whether the animation has finished or been cancelled
  • - *
  • {@link #getDisplay()} — whether the animation is currently running
  • - *
- */ public class Animate { private final List nodes = new ArrayList<>(); private final List> cancelPredicates = new ArrayList<>(); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateAction.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateAction.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateAction.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateAction.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateManager.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateManager.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateManager.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateNode.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateNode.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateNode.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateNode.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/AngleAnimator.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/AngleAnimator.java similarity index 83% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/AngleAnimator.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/AngleAnimator.java index 0fa795e..33d668f 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/AngleAnimator.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/AngleAnimator.java @@ -2,10 +2,6 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.animation.timeline; -/** - * Animates an angle value over a given duration using an easing function. - * Provides delta-based progress for both "glow" (forward) and "fade" (reverse) animations. - */ public final class AngleAnimator { private final int durationTicks; private final double targetAngle; @@ -28,10 +24,7 @@ public boolean getFinished() { return this.finished; } - /** - * Returns the angle delta for a forward (growing) animation step. - */ - public double glowDelta() { + public double glowDelta() { if (this.finished) { return 0.0; } @@ -47,10 +40,7 @@ public double glowDelta() { return delta; } - /** - * Returns the angle delta for a reverse (fading) animation step. - */ - public double fadeDelta() { + public double fadeDelta() { if (this.finished && this.tick >= this.durationTicks) { this.finished = false; this.tick = 0; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Ease.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Ease.java similarity index 60% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Ease.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Ease.java index 6fb4fe2..92a789a 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Ease.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Ease.java @@ -2,10 +2,6 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.animation.timeline; -/** - * Easing function interface for timeline animations. - * Takes a progress value t in [0,1] and returns the eased value. - */ @FunctionalInterface public interface Ease { double cal(double t); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Eases.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Eases.java similarity index 88% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Eases.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Eases.java index e82f266..dc44fd5 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Eases.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Eases.java @@ -6,9 +6,6 @@ import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec2; -/** - * Collection of standard easing functions and factory methods. - */ public final class Eases { public static final Eases INSTANCE = new Eases(); @@ -105,11 +102,7 @@ public static Ease outBounce() { return outBounce(7.5625, 2.75); } - /** - * Create a cubic bezier easing function using RelativeLocation handles. - * Start at (0,0), end at (1,1). startHandle and endHandle define the two control points. - */ - public Ease bezierEase(RelativeLocation startHandle, RelativeLocation endHandle) { + public Ease bezierEase(RelativeLocation startHandle, RelativeLocation endHandle) { RelativeLocation target = new RelativeLocation(1, 1, 0); RelativeLocation end = new RelativeLocation( target.getX() + endHandle.getX(), @@ -129,10 +122,7 @@ public Ease bezierEase(RelativeLocation startHandle, RelativeLocation endHandle) }; } - /** - * Create a cubic bezier easing function using Vec3 handles. - */ - public Ease bezierEase(Vec3 startHandle, Vec3 endHandle) { + public Ease bezierEase(Vec3 startHandle, Vec3 endHandle) { Vec3 target = new Vec3(1.0, 1.0, 0.0); Vec3 end = target.add(endHandle); return x -> { @@ -148,10 +138,7 @@ public Ease bezierEase(Vec3 startHandle, Vec3 endHandle) { }; } - /** - * Create a cubic bezier easing function using Vec2 handles. - */ - public Ease bezierEase(Vec2 startHandle, Vec2 endHandle) { + public Ease bezierEase(Vec2 startHandle, Vec2 endHandle) { Vec2 target = new Vec2(1.0f, 1.0f); Vec2 end = new Vec2(target.x + endHandle.x, target.y + endHandle.y); return x -> { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Timeline.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Timeline.java similarity index 77% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Timeline.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Timeline.java index af01a0b..75ec19c 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Timeline.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Timeline.java @@ -6,11 +6,6 @@ import java.util.Deque; import java.util.function.BooleanSupplier; -/** - * A simple sequential step-based timeline. - * Each step is a BooleanSupplier that returns true when the step is done. - * On each tick, the current step is polled; when it returns true, the next step begins. - */ public final class Timeline { private final Deque steps = new ArrayDeque<>(); diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/CodecField.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/CodecField.java new file mode 100644 index 0000000..37c76ce --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/CodecField.java @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface CodecField { + int index() default 0; +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/ReiAutoRegister.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/ReiAutoRegister.java similarity index 69% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/ReiAutoRegister.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/ReiAutoRegister.java index 44943b2..0d4f4aa 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/ReiAutoRegister.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/ReiAutoRegister.java @@ -7,10 +7,6 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -/** - * Marks a class for automatic registration by the ReiParticles API scanner. - * Classes annotated with this will be discovered and registered at mod init time. - */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface ReiAutoRegister { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/BufferCodec.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/BufferCodec.java similarity index 52% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/BufferCodec.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/BufferCodec.java index 0cb9276..af3b4ae 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/BufferCodec.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/BufferCodec.java @@ -4,21 +4,9 @@ import net.minecraft.network.FriendlyByteBuf; -/** - * Replacement for Fabric/Mojang's {@code StreamCodec} which - * was introduced in Minecraft 1.20.5 and does not exist in Forge 1.20.1. - *

- * Provides symmetric encode/decode for a type {@code T} to/from a - * {@link FriendlyByteBuf}. - * - * @param the type to serialize - */ public interface BufferCodec { - /** - * Creates a {@link BufferCodec} from explicit encoder and decoder lambdas. - */ - static BufferCodec of(Encoder encoder, Decoder decoder) { + static BufferCodec of(Encoder encoder, Decoder decoder) { return new BufferCodec() { @Override public void encode(FriendlyByteBuf buf, T value) { @@ -32,15 +20,9 @@ public T decode(FriendlyByteBuf buf) { }; } - /** - * Writes {@code value} into the buffer. - */ - void encode(FriendlyByteBuf buf, T value); + void encode(FriendlyByteBuf buf, T value); - /** - * Reads a value from the buffer. - */ - T decode(FriendlyByteBuf buf); + T decode(FriendlyByteBuf buf); @FunctionalInterface interface Encoder { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java similarity index 86% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java index 6e8fa1a..0b404d7 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java @@ -26,13 +26,6 @@ import java.util.HashMap; import java.util.Map; -/** - * Singleton codec registry for serializing annotated {@link CodecField} fields - * to/from {@link FriendlyByteBuf}. - *

- * Replaces the original Fabric implementation that used {@code StreamCodec} - * (which does not exist in Forge 1.20.1). Instead uses {@link BufferCodec}. - */ public final class CodecHelper { public static final CodecHelper INSTANCE = new CodecHelper(); @@ -47,18 +40,10 @@ public Map> getSupposedTypes() { return supposedTypes; } - /** - * Registers a codec for the given type. - */ public void register(Class type, BufferCodec codec) { supposedTypes.put(type.getName(), codec); } - /** - * Copies all {@link CodecField}-annotated, non-final fields from {@code other} - * to {@code current} via reflection. Both objects must be the same class. - * Fields are processed in stable {@link CodecField#index()} order. - */ public void updateFields(Object current, Object other) { if (current == null || other == null) return; if (!current.getClass().equals(other.getClass())) return; @@ -73,12 +58,6 @@ public void updateFields(Object current, Object other) { } } - /** - * Encodes all {@link CodecField}-annotated fields of {@code obj} into {@code buf}, - * in stable {@link CodecField#index()} order. - * - * @throws IllegalStateException if a field's type has no registered codec - */ @SuppressWarnings("unchecked") public void encodeAnnotatedFields(FriendlyByteBuf buf, Object obj) { for (Field field : getCodecFields(obj.getClass())) { @@ -95,12 +74,6 @@ public void encodeAnnotatedFields(FriendlyByteBuf buf, Object obj) { } } - /** - * Decodes all {@link CodecField}-annotated fields of {@code obj} from {@code buf}, - * in stable {@link CodecField#index()} order. - * - * @throws IllegalStateException if a field's type has no registered codec - */ @SuppressWarnings("unchecked") public void decodeAnnotatedFields(FriendlyByteBuf buf, Object obj) { for (Field field : getCodecFields(obj.getClass())) { @@ -117,10 +90,7 @@ public void decodeAnnotatedFields(FriendlyByteBuf buf, Object obj) { } } - /** - * Returns {@link CodecField}-annotated non-final fields sorted by - * {@link CodecField#index()} then by field name for deterministic ordering. - */ + // TODO: cache this per class, reflection every call is slow private static List getCodecFields(Class clazz) { List result = new ArrayList<>(); for (Field f : clazz.getDeclaredFields()) { @@ -133,8 +103,6 @@ private static List getCodecFields(Class clazz) { return result; } - // ────────────────── Static registration of built-in types ────────────────── - static { registerPrimitives(); registerArrays(); @@ -143,11 +111,6 @@ private static List getCodecFields(Class clazz) { registerMinecraftTypes(); registerProjectTypes(); registerRangeTypes(); - // NOTE: ControllableParticleData, SimpleRandomParticleData, ItemStack, - // and all InterpolatorXxx types should register themselves via - // CodecHelper.INSTANCE.register(MyClass.class, myCodec) - // in their own static initializers or during mod init, since their - // codecs are not yet available as static fields in Forge 1.20.1. } private static void registerPrimitives() { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/composition/handler/ParticleCompositionHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/composition/handler/ParticleCompositionHelper.java similarity index 70% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/composition/handler/ParticleCompositionHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/composition/handler/ParticleCompositionHelper.java index af0a266..ccff004 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/composition/handler/ParticleCompositionHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/composition/handler/ParticleCompositionHelper.java @@ -18,16 +18,6 @@ import java.util.Comparator; import java.util.List; -/** - * Singleton helper that auto-generates {@link BufferCodec} instances for - * {@link ParticleComposition} subclasses by scanning {@link CodecField} - * annotated fields via reflection. - *

- * Fields are sorted by name for deterministic encode/decode order. - * The codec also handles the base composition fields via - * {@link ParticleComposition#encodeBase}/{@link ParticleComposition#decodeBase} - * (and the sequenced variant for {@link SequencedParticleComposition} subclasses). - */ public final class ParticleCompositionHelper { public static final ParticleCompositionHelper INSTANCE = new ParticleCompositionHelper(); @@ -35,17 +25,7 @@ public final class ParticleCompositionHelper { private ParticleCompositionHelper() { } - /** - * Generates a {@link BufferCodec} for the concrete composition type. - *

- * The composition class must have a constructor {@code (Vec3, Level)} for - * reflective instantiation during decode. - * - * @param randomInstance any instance of the target composition class - * (used only to determine the concrete type) - * @return a codec that encodes/decodes the full composition state - */ - public BufferCodec generateCodec(ParticleComposition randomInstance) { + public BufferCodec generateCodec(ParticleComposition randomInstance) { Class type = randomInstance.getClass(); // Resolve constructor (Vec3, Level) for reflective instantiation @@ -64,7 +44,7 @@ public BufferCodec generateCodec(ParticleComposition random ); } - // ─── Encode ────────────────────────────────────────────────────────── + // --”€--”€--”€ Encode --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ private static void encodeComposition(Class type, FriendlyByteBuf buf, ParticleComposition composition) { @@ -89,7 +69,7 @@ private static void encodeComposition(Class type, FriendlyByteBuf buf, } } - // ─── Decode ────────────────────────────────────────────────────────── + // --”€--”€--”€ Decode --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ private static ParticleComposition decodeComposition(Constructor constructor, Class type, @@ -126,12 +106,9 @@ private static ParticleComposition decodeComposition(Constructor constructor, return instance; } - // ─── Utilities ─────────────────────────────────────────────────────── + // --”€--”€--”€ Utilities --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ - /** - * Collects all non-final fields annotated with {@link CodecField}, sorted by name. - */ - private static List getCodecFields(Class type) { + private static List getCodecFields(Class type) { Field[] allFields = type.getDeclaredFields(); List result = new ArrayList<>(); for (Field f : allFields) { @@ -143,16 +120,13 @@ private static List getCodecFields(Class type) { return result; } - /** - * Looks up the registered codec for the given type, throwing if not found. - */ - @SuppressWarnings("unchecked") + @SuppressWarnings("unchecked") private static BufferCodec getCodecOrThrow(Class fieldType) { BufferCodec codec = CodecHelper.INSTANCE.getSupposedTypes().get(fieldType.getName()); if (codec == null) { throw new IllegalArgumentException( "Unsupported type: " + fieldType.getName() + - " — register it via CodecHelper.INSTANCE.register()"); + " --” register it via CodecHelper.INSTANCE.register()"); } return (BufferCodec) codec; } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/display/handle/DisplayEntityHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/display/handle/DisplayEntityHelper.java similarity index 72% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/display/handle/DisplayEntityHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/display/handle/DisplayEntityHelper.java index edec563..992c2c3 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/display/handle/DisplayEntityHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/display/handle/DisplayEntityHelper.java @@ -16,14 +16,6 @@ import java.util.Comparator; import java.util.List; -/** - * Singleton helper that auto-generates {@link BufferCodec} instances for - * {@link DisplayEntity} subclasses by scanning {@link CodecField} - * annotated fields via reflection. - *

- * Structurally identical to {@link com.reiasu.reiparticlesapi.annotations.composition.handler.ParticleCompositionHelper}, - * but targets DisplayEntity instead of ParticleComposition. - */ public final class DisplayEntityHelper { public static final DisplayEntityHelper INSTANCE = new DisplayEntityHelper(); @@ -31,18 +23,7 @@ public final class DisplayEntityHelper { private DisplayEntityHelper() { } - /** - * Generates a {@link BufferCodec} for the concrete display entity type. - *

- * The display entity class must have a constructor {@code (Vec3, Level)} - * for reflective instantiation during decode. In practice the original - * Fabric code uses {@code (Vec3, World)} which maps to {@code (Vec3, Level)} - * in Forge MCP mappings. - * - * @param randomInstance any instance of the target display entity class - * @return a codec that encodes/decodes the full display entity state - */ - public BufferCodec generateCodec(DisplayEntity randomInstance) { + public BufferCodec generateCodec(DisplayEntity randomInstance) { Class type = randomInstance.getClass(); Constructor constructor; @@ -66,7 +47,7 @@ public BufferCodec generateCodec(DisplayEntity randomInstance) { ); } - // ─── Encode ────────────────────────────────────────────────────────── + // --”€--”€--”€ Encode --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ private static void encodeEntity(Class type, FriendlyByteBuf buf, DisplayEntity entity) { @@ -85,7 +66,7 @@ private static void encodeEntity(Class type, FriendlyByteBuf buf, } } - // ─── Decode ────────────────────────────────────────────────────────── + // --”€--”€--”€ Decode --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ private static DisplayEntity decodeEntity(Constructor constructor, Class type, @@ -119,7 +100,7 @@ private static DisplayEntity decodeEntity(Constructor constructor, return instance; } - // ─── Utilities ─────────────────────────────────────────────────────── + // --”€--”€--”€ Utilities --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ private static List getCodecFields(Class type) { Field[] allFields = type.getDeclaredFields(); @@ -139,7 +120,7 @@ private static BufferCodec getCodecOrThrow(Class fieldType) { if (codec == null) { throw new IllegalArgumentException( "Unsupported type: " + fieldType.getName() + - " — register it via CodecHelper.INSTANCE.register()"); + " --” register it via CodecHelper.INSTANCE.register()"); } return (BufferCodec) codec; } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/emitter/handle/ParticleEmittersHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/emitter/handle/ParticleEmittersHelper.java similarity index 77% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/emitter/handle/ParticleEmittersHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/emitter/handle/ParticleEmittersHelper.java index e4d23e7..5bbac92 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/emitter/handle/ParticleEmittersHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/emitter/handle/ParticleEmittersHelper.java @@ -17,37 +17,18 @@ import java.util.Comparator; import java.util.List; -/** - * Helper for {@link ClassParticleEmitters} that provides: - *
    - *
  • Reflection-based field copy via {@link #updateEmitter}
  • - *
  • Auto-generated codec (encode/decode) based on {@link CodecField} annotations
  • - *
- */ public final class ParticleEmittersHelper { public static final ParticleEmittersHelper INSTANCE = new ParticleEmittersHelper(); private ParticleEmittersHelper() {} - /** - * Copies all {@link CodecField}-annotated fields from {@code other} to {@code current}, - * provided they share the same emitter ID. - */ - public void updateEmitter(ClassParticleEmitters current, ClassParticleEmitters other) { + public void updateEmitter(ClassParticleEmitters current, ClassParticleEmitters other) { if (current == null || other == null) return; if (!current.getEmittersID().equals(other.getEmittersID())) return; CodecHelper.INSTANCE.updateFields(current, other); } - /** - * Generates a {@link BufferCodec} for the given {@link ClassParticleEmitters} subclass - * by reflecting over its {@link CodecField}-annotated fields. - *

- * The encoder writes the base emitter data followed by each annotated field - * (sorted by field name). The decoder constructs a new instance via the - * {@code (Vec3, Level)} constructor, reads base data, then reads each field. - */ - public BufferCodec generateCodec(ClassParticleEmitters randomInstance) { + public BufferCodec generateCodec(ClassParticleEmitters randomInstance) { Class type = randomInstance.getClass(); Constructor constructor; @@ -114,11 +95,7 @@ private ParticleEmitters decodeEmitter(Constructor constructor, Class type return instance; } - /** - * Returns all {@link CodecField}-annotated, non-final fields of the given class, - * sorted by field name for deterministic serialization order. - */ - private List getCodecFields(Class type) { + private List getCodecFields(Class type) { Field[] allFields = type.getDeclaredFields(); List result = new ArrayList<>(); for (Field f : allFields) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventHandler.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventHandler.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventHandler.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventListener.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventListener.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventListener.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventListener.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/AbstractBarrage.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/AbstractBarrage.java similarity index 84% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/AbstractBarrage.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/AbstractBarrage.java index 385f239..284ee4f 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/AbstractBarrage.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/AbstractBarrage.java @@ -16,20 +16,6 @@ import java.util.function.Predicate; import java.util.stream.Collectors; - -/** - * Base implementation of {@link Barrage} providing standard projectile - * movement, collision detection against blocks/entities/barrages, and - * lifetime/pass-through management. - *

- * Subclasses must implement: - *

    - *
  • {@link #filterHitEntity(LivingEntity)} —which entities this barrage can hit
  • - *
  • {@link #onHit(BarrageHitResult)} —what happens on impact
  • - *
- *

- * Forge port: barrage-barrage collision is now fully implemented via {@link BarrageManager}. - */ public abstract class AbstractBarrage implements Barrage { private Vec3 loc; @@ -60,9 +46,6 @@ protected AbstractBarrage(Vec3 loc, ServerLevel world, HitBox hitBox, this.isValid = true; this.uuid = UUID.randomUUID(); } - - // ---- Barrage interface implementation ---- - @Override public Vec3 getLoc() { return loc; } @@ -108,33 +91,16 @@ protected AbstractBarrage(Vec3 loc, ServerLevel world, HitBox hitBox, @Override public UUID getUuid() { return uuid; } + public abstract boolean filterHitEntity(LivingEntity entity); - // ---- Abstract/overridable ---- - - /** - * Return true if this barrage can hit the given entity. - */ - public abstract boolean filterHitEntity(LivingEntity entity); - - /** - * Return true if this barrage can collide with another barrage. - * Default: collides with barrages from a different shooter. - */ - public boolean filterHitBarrage(Barrage barrage) { + public boolean filterHitBarrage(Barrage barrage) { return !Objects.equals(barrage.getShooter(), this.getShooter()) && barrage != this; } - /** - * Returns the position used for the bound controller's teleport. - * Override to offset from {@link #getLoc()} if needed. - */ - public Vec3 getControllerLocation() { + public Vec3 getControllerLocation() { return getLoc(); } - - // ---- Tick ---- - @Override public void tick() { if (!getLaunch() || !getValid()) { @@ -289,11 +255,7 @@ private void hitInternal(BarrageHitResult result) { remove(); } - - /** - * Removes this barrage: invalidates and removes the bound controller. - */ - public void remove() { + public void remove() { // Note: ServerController.remove() not in current interface; call cancel() bindControl.cancel(); isValid = false; @@ -304,19 +266,13 @@ public boolean noclip() { return spawnTick < options.getNoneHitBoxTick(); } - /** - * Collects all living entities overlapping this barrage's hit box. - */ - public Set hitBoxEntities() { + public Set hitBoxEntities() { AABB aabb = hitBox.ofBox(loc); List found = world.getEntitiesOfClass(LivingEntity.class, aabb, e -> true); return new HashSet<>(found); } - /** - * Collects entities overlapping the hit box that pass the given filter. - */ - public Set hitBoxEntities(Predicate filter) { + public Set hitBoxEntities(Predicate filter) { AABB aabb = hitBox.ofBox(loc); List found = world.getEntitiesOfClass(LivingEntity.class, aabb, filter); return new HashSet<>(found); diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/Barrage.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/Barrage.java new file mode 100644 index 0000000..271b7ca --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/Barrage.java @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.barrages; + +import com.reiasu.reiparticlesapi.network.particle.ServerController; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.phys.Vec3; +import net.minecraft.server.level.ServerLevel; + +import javax.annotation.Nullable; +import java.util.UUID; + +public interface Barrage { + + Vec3 getLoc(); + + void setLoc(Vec3 loc); + + ServerLevel getWorld(); + + HitBox getHitBox(); + + void setHitBox(HitBox hitBox); + + @Nullable + LivingEntity getShooter(); + + void setShooter(@Nullable LivingEntity shooter); + + Vec3 getDirection(); + + void setDirection(Vec3 direction); + + boolean getLaunch(); + + void setLaunch(boolean launch); + + boolean getValid(); + + BarrageOption getOptions(); + + UUID getUuid(); + + ServerController getBindControl(); + + void hit(BarrageHitResult result); + + void onHit(BarrageHitResult result); + + boolean noclip(); + + void tick(); +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageHitResult.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageHitResult.java similarity index 88% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageHitResult.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageHitResult.java index a262ed8..3dba175 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageHitResult.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageHitResult.java @@ -9,10 +9,6 @@ import javax.annotation.Nullable; import java.util.ArrayList; -/** - * Holds the result of a barrage collision check, collecting all hit blocks, - * entities, and other barrages in a single tick. - */ public final class BarrageHitResult { @Nullable diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageManager.java similarity index 92% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageManager.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageManager.java index 8acc6d4..1746e31 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageManager.java @@ -10,10 +10,6 @@ import java.util.List; import java.util.concurrent.ConcurrentLinkedDeque; -/** - * Manages all active {@link Barrage} instances on the server, - * handling spawning, ticking, and collision queries. - */ public final class BarrageManager { public static final BarrageManager INSTANCE = new BarrageManager(); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageOption.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageOption.java similarity index 93% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageOption.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageOption.java index 127e4e4..4ad4726 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageOption.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageOption.java @@ -2,10 +2,6 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.barrages; -/** - * Configuration options for a barrage (projectile) entity. - * Controls collision behavior, speed, acceleration, and lifetime. - */ public final class BarrageOption { /** Gravity constant used by barrages. */ @@ -24,9 +20,6 @@ public final class BarrageOption { private double acceleration = 0.0; private boolean accelerationMaxSpeedEnabled = false; private double accelerationMaxSpeed = 1.0; - - // ---- Getters / Setters ---- - public boolean isAcrossBlock() { return acrossBlock; } public void setAcrossBlock(boolean v) { this.acrossBlock = v; } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/HitBox.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/HitBox.java similarity index 79% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/HitBox.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/HitBox.java index 3199d72..87a6c7d 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/barrages/HitBox.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/HitBox.java @@ -10,10 +10,6 @@ import java.util.Arrays; import java.util.List; -/** - * Axis-aligned hit box defined by two corner points. - * Corners are automatically sorted so (x1,y1,z1) ≤ (x2,y2,z2). - */ public final class HitBox { private double x1, y1, z1; @@ -29,15 +25,9 @@ public HitBox(double x1, double y1, double z1, double x2, double y2, double z2) replacePoint(); } - /** - * Creates a centered HitBox with dimensions {@code dx * dy * dz}. - */ - public static HitBox of(double dx, double dy, double dz) { + public static HitBox of(double dx, double dy, double dz) { return new HitBox(-dx / 2.0, -dy / 2.0, -dz / 2.0, dx / 2.0, dy / 2.0, dz / 2.0); } - - // ---- Getters / Setters ---- - public double getX1() { return x1; } public void setX1(double v) { this.x1 = v; } public double getY1() { return y1; } @@ -51,21 +41,14 @@ public static HitBox of(double dx, double dy, double dz) { public double getZ2() { return z2; } public void setZ2(double v) { this.z2 = v; } - /** - * Returns a Minecraft {@link AABB} offset by the given center position. - */ - public AABB ofBox(Vec3 center) { + public AABB ofBox(Vec3 center) { return new AABB( x1 + center.x, y1 + center.y, z1 + center.z, x2 + center.x, y2 + center.y, z2 + center.z ); } - /** - * Rotates the two corner points from {@code axis} direction to {@code to} direction, - * then re-normalizes so corners stay sorted. - */ - public void rotateTo(RelativeLocation axis, RelativeLocation to) { + public void rotateTo(RelativeLocation axis, RelativeLocation to) { RelativeLocation p1 = new RelativeLocation(x1, y1, z1); RelativeLocation p2 = new RelativeLocation(x2, y2, z2); List points = Arrays.asList(p1, p2); @@ -75,15 +58,9 @@ public void rotateTo(RelativeLocation axis, RelativeLocation to) { replacePoint(); } - /** - * Returns a copy of this HitBox with the same dimensions. - */ - public HitBox copy() { + public HitBox copy() { return new HitBox(x1, y1, z1, x2, y2, z2); } - - // ---- Internal ---- - private void replacePoint() { double tx = x1; x1 = Math.min(x1, x2); x2 = Math.max(tx, x2); double ty = y1; y1 = Math.min(y1, y2); y2 = Math.max(ty, y2); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/client/CameraShakeClientState.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/client/CameraShakeClientState.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/client/CameraShakeClientState.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/client/CameraShakeClientState.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/client/ClientTickEventForwarder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/client/ClientTickEventForwarder.java similarity index 72% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/client/ClientTickEventForwarder.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/client/ClientTickEventForwarder.java index c56cd04..240b53f 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/client/ClientTickEventForwarder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/client/ClientTickEventForwarder.java @@ -2,6 +2,7 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.client; +import net.neoforged.neoforge.common.NeoForge; import com.reiasu.reiparticlesapi.event.ReiEventBus; import com.reiasu.reiparticlesapi.event.events.client.ClientPostTickEvent; import com.reiasu.reiparticlesapi.event.events.client.ClientPreTickEvent; @@ -15,18 +16,18 @@ private ClientTickEventForwarder() { public static void onClientStartTick() { Minecraft minecraft = Minecraft.getInstance(); - ReiEventBus.call(new ClientPreTickEvent(minecraft)); + NeoForge.EVENT_BUS.post(new ClientPreTickEvent(minecraft)); if (minecraft.level != null) { - ReiEventBus.call(new ClientWorldPreTickEvent(minecraft.level)); + NeoForge.EVENT_BUS.post(new ClientWorldPreTickEvent(minecraft.level)); } } public static void onClientEndTick() { Minecraft minecraft = Minecraft.getInstance(); if (minecraft.level != null) { - ReiEventBus.call(new ClientWorldPostTickEvent(minecraft.level)); + NeoForge.EVENT_BUS.post(new ClientWorldPostTickEvent(minecraft.level)); } - ReiEventBus.call(new ClientPostTickEvent(minecraft)); + NeoForge.EVENT_BUS.post(new ClientPostTickEvent(minecraft)); } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/commands/APICommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/commands/APICommand.java similarity index 67% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/commands/APICommand.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/commands/APICommand.java index a0734d5..85f2b17 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/commands/APICommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/commands/APICommand.java @@ -7,26 +7,13 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import net.minecraft.commands.CommandSourceStack; -/** - * Registers the {@code /cleanapi} command tree for ReiParticlesAPI. - *

- * Currently provides: - *

    - *
  • {@code /cleanapi display} – clears all client-side display entities
  • - *
- */ public final class APICommand { public static final APICommand INSTANCE = new APICommand(); private APICommand() { } - /** - * Register the {@code /cleanapi} command with the given dispatcher. - * - * @param dispatcher the server command dispatcher - */ - public void register(CommandDispatcher dispatcher) { + public void register(CommandDispatcher dispatcher) { dispatcher.register( LiteralArgumentBuilder.literal("cleanapi") .then(LiteralArgumentBuilder.literal("display") diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java similarity index 94% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java index e9e8105..f631ecd 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java @@ -5,12 +5,6 @@ import net.neoforged.neoforge.common.ModConfigSpec; import org.apache.commons.lang3.tuple.Pair; -/** - * API-level configuration for particle rendering behavior. - *

- * Backed by Forge's config system — values are persisted to - * {@code reiparticlesapi-common.toml} and hot-reloadable. - */ public final class APIConfig { public static final ModConfigSpec SPEC; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/display/DebugDisplayEntity.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DebugDisplayEntity.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/display/DebugDisplayEntity.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DebugDisplayEntity.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntity.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntity.java similarity index 57% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntity.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntity.java index 81ce450..a8c91ee 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntity.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntity.java @@ -9,17 +9,9 @@ import java.util.UUID; -/** - * Base class for display entities (non-particle visual elements managed - * by the ReiParticles system). - *

- * Carries position, rotation (yaw/pitch/roll), scale, and validity state. - * Provides static {@link #encodeBase}/{@link #decodeBase} for network - * serialization of the base fields. - */ public abstract class DisplayEntity implements ServerController { - // ─── Static encode/decode ──────────────────────────────────────────── + // --”€--”€--”€ Static encode/decode --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ public static void encodeBase(DisplayEntity data, FriendlyByteBuf buf) { buf.writeDouble(data.pos.x()); @@ -43,7 +35,7 @@ public static void decodeBase(DisplayEntity instance, FriendlyByteBuf buf) { instance.controlUUID = buf.readUUID(); } - // ─── Fields ────────────────────────────────────────────────────────── + // --”€--”€--”€ Fields --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ private UUID controlUUID = UUID.randomUUID(); private boolean valid = true; @@ -59,7 +51,7 @@ public void spawnInWorld(ServerLevel world, Vec3 pos) { DisplayEntityManager.INSTANCE.spawn(this); } - // ─── Accessors ─────────────────────────────────────────────────────── + // --”€--”€--”€ Accessors --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ public UUID getControlUUID() { return controlUUID; @@ -117,7 +109,7 @@ public void setScale(float scale) { this.scale = scale; } - // ─── Level binding ─────────────────────────────────────────────────── + // --”€--”€--”€ Level binding --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ public DisplayEntity bindLevel(ServerLevel level) { this.level = level; @@ -128,7 +120,7 @@ protected ServerLevel level() { return level; } - // ─── Lifecycle ─────────────────────────────────────────────────────── + // --”€--”€--”€ Lifecycle --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ public void update(DisplayEntity other) { this.valid = other.valid; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntityManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntityManager.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntityManager.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntityManager.java diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/ReiRenderTypesProvider.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/ReiRenderTypesProvider.java new file mode 100644 index 0000000..1cf0f40 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/ReiRenderTypesProvider.java @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.display; + +import net.minecraft.client.renderer.RenderType; + +public interface ReiRenderTypesProvider { + RenderType glow(); +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/enums/DistType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/enums/DistType.java similarity index 80% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/enums/DistType.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/enums/DistType.java index 56498fa..493203d 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/enums/DistType.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/enums/DistType.java @@ -2,9 +2,6 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.enums; -/** - * Distribution side indicator. - */ public enum DistType { CLIENT, SERVER diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java similarity index 80% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java index 1a2052b..1d69744 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java @@ -40,22 +40,22 @@ public static void init() { initialized = true; NeoForge.EVENT_BUS.addListener((PlayerEvent.PlayerLoggedInEvent event) -> - ReiEventBus.call(new PlayerLoggedInEvent(event.getEntity()))); + NeoForge.EVENT_BUS.post(new PlayerLoggedInEvent(event.getEntity()))); NeoForge.EVENT_BUS.addListener((PlayerEvent.PlayerLoggedOutEvent event) -> - ReiEventBus.call(new PlayerDisconnectEvent(event.getEntity()))); + NeoForge.EVENT_BUS.post(new PlayerDisconnectEvent(event.getEntity()))); NeoForge.EVENT_BUS.addListener((PlayerDestroyItemEvent event) -> - ReiEventBus.call(new PlayerItemDestroyEvent(event.getEntity(), event.getOriginal()))); + NeoForge.EVENT_BUS.post(new PlayerItemDestroyEvent(event.getEntity(), event.getOriginal()))); NeoForge.EVENT_BUS.addListener((PlayerEvent.PlayerRespawnEvent event) -> - ReiEventBus.call(new ServerPlayerRespawnEvent(event.getEntity(), event.getEntity().level()))); + NeoForge.EVENT_BUS.post(new ServerPlayerRespawnEvent(event.getEntity(), event.getEntity().level()))); NeoForge.EVENT_BUS.addListener((LivingDeathEvent event) -> { if (!(event.getEntity() instanceof Player player)) { return; } - ServerPlayerDeathEvent deathEvent = ReiEventBus.call(new ServerPlayerDeathEvent(player, player.level(), event.getSource())); + ServerPlayerDeathEvent deathEvent = NeoForge.EVENT_BUS.post(new ServerPlayerDeathEvent(player, player.level(), event.getSource())); if (deathEvent.isCancelled()) { event.setCanceled(true); } @@ -66,7 +66,7 @@ public static void init() { if (player == null) { return; } - PlayerBlockBreakEvent breakEvent = ReiEventBus.call( + PlayerBlockBreakEvent breakEvent = NeoForge.EVENT_BUS.post( new PlayerBlockBreakEvent(player, player.level(), event.getPos(), event.getState()) ); if (breakEvent.isCancelled()) { @@ -75,10 +75,10 @@ public static void init() { }); NeoForge.EVENT_BUS.addListener((PlayerTickEvent.Pre event) -> { - ReiEventBus.call(new EntityPreTickEvent(event.getEntity())); + NeoForge.EVENT_BUS.post(new EntityPreTickEvent(event.getEntity())); }); NeoForge.EVENT_BUS.addListener((PlayerTickEvent.Post event) -> { - ReiEventBus.call(new EntityPostTickEvent(event.getEntity())); + NeoForge.EVENT_BUS.post(new EntityPostTickEvent(event.getEntity())); }); // Client/Server/World tick events are forwarded by ClientTickEventForwarder @@ -88,7 +88,7 @@ public static void init() { NeoForge.EVENT_BUS.addListener((ClientPlayerNetworkEvent.LoggingIn event) -> { Minecraft mc = Minecraft.getInstance(); if (mc.level != null) { - ReiEventBus.call(new ClientWorldChangeEvent(mc.level)); + NeoForge.EVENT_BUS.post(new ClientWorldChangeEvent(mc.level)); } }); @@ -96,7 +96,7 @@ public static void init() { NeoForge.EVENT_BUS.addListener((BlockEvent.EntityPlaceEvent event) -> { Entity entity = event.getEntity(); if (entity == null) return; - EntityPrePlaceBlockEvent placeEvent = ReiEventBus.call( + EntityPrePlaceBlockEvent placeEvent = NeoForge.EVENT_BUS.post( new EntityPrePlaceBlockEvent(entity, entity.level(), event.getPos(), null) ); if (placeEvent.isCancelled()) { @@ -111,9 +111,9 @@ public static void init() { Vec3 delta = entity.getDeltaMovement(); if (delta.lengthSqr() < 1e-10) return; Vec3 target = pos.add(delta); - EntityPreMoveEvent preMoveEvent = ReiEventBus.call(new EntityPreMoveEvent(entity, delta)); + EntityPreMoveEvent preMoveEvent = NeoForge.EVENT_BUS.post(new EntityPreMoveEvent(entity, delta)); if (preMoveEvent.isCancelled()) return; - ReiEventBus.call(new EntityMoveEvent(entity, delta, target)); + NeoForge.EVENT_BUS.post(new EntityMoveEvent(entity, delta, target)); }); } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/ReiEventBus.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/ReiEventBus.java similarity index 83% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/ReiEventBus.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/ReiEventBus.java index fd97db8..2419987 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/ReiEventBus.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/ReiEventBus.java @@ -12,9 +12,7 @@ import com.mojang.logging.LogUtils; import org.slf4j.Logger; -import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.lang.reflect.Modifier; import java.util.EnumMap; import java.util.Map; import java.util.Objects; @@ -43,21 +41,13 @@ public void appendListenerTarget(String modId, String packageName) { ReiAPIScanner.registerPackage(packageName); } - /** - * Initializes all registered event listeners. Idempotent — only runs once. - *

- * If packages have been registered via {@link ReiAPIScanner#registerPackage(String)}, - * performs a ClassGraph scan to discover {@link EventListener @EventListener} classes. - * Otherwise, logs an info message suggesting explicit registration. - */ - public void initListeners() { + public void initListeners() { if (!initialized.compareAndSet(false, true)) { return; } ReiAPIScanner scanner = ReiAPIScanner.INSTANCE; if (scanner.getScannedPackageCount() == 0) { - LOGGER.info("initListeners(): no packages registered for scanning. " - + "Use registerAnnotatedClass() or registerListenerInstance() for explicit registration."); + return; } scanner.scan(); @@ -70,7 +60,7 @@ public void initListeners() { LOGGER.error("initListeners(): failed to register {}", clazz.getName(), t); } } - LOGGER.info("initListeners(): discovered and registered {} @EventListener classes", count); + LOGGER.info("registered {} listeners", count); } public void registerAnnotatedClass(Class listenerClass) { @@ -177,21 +167,6 @@ private void registerHandler( } private static Object createListenerInstance(Class listenerClass) { - try { - Field instanceField = listenerClass.getDeclaredField("INSTANCE"); - if (Modifier.isStatic(instanceField.getModifiers())) { - instanceField.setAccessible(true); - Object existing = instanceField.get(null); - if (existing != null) { - return existing; - } - } - } catch (NoSuchFieldException ignored) { - // not a Kotlin object or no singleton instance field - } catch (Throwable t) { - throw new IllegalStateException("Failed to resolve INSTANCE for " + listenerClass.getName(), t); - } - try { var ctor = listenerClass.getDeclaredConstructor(); ctor.setAccessible(true); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/api/EventCancelable.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventCancelable.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/api/EventCancelable.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventCancelable.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/api/EventExecutor.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventExecutor.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/api/EventExecutor.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventExecutor.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/api/EventInterruptible.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventInterruptible.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/api/EventInterruptible.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventInterruptible.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/api/EventPriority.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventPriority.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/api/EventPriority.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventPriority.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/api/ReiEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/ReiEvent.java similarity index 59% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/api/ReiEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/ReiEvent.java index 54eed78..7c89cb0 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/api/ReiEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/ReiEvent.java @@ -2,6 +2,8 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.api; -public abstract class ReiEvent { +import net.neoforged.bus.api.Event; + +public abstract class ReiEvent extends Event { } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPostTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPostTickEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPostTickEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPostTickEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPreTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPreTickEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPreTickEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPreTickEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityMoveEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityMoveEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityMoveEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityMoveEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPostTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPostTickEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPostTickEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPostTickEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreMoveEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreMoveEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreMoveEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreMoveEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPrePlaceBlockEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPrePlaceBlockEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPrePlaceBlockEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPrePlaceBlockEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreTickEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreTickEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreTickEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/LivingEntityEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/LivingEntityEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/LivingEntityEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/LivingEntityEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerBlockBreakEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerBlockBreakEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerBlockBreakEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerBlockBreakEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerDisconnectEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerDisconnectEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerDisconnectEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerDisconnectEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerItemDestroyEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerItemDestroyEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerItemDestroyEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerItemDestroyEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerLoggedInEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerLoggedInEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerLoggedInEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerLoggedInEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerDeathEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerDeathEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerDeathEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerDeathEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerRespawnEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerRespawnEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerRespawnEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerRespawnEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/projectile/ProjectileEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/projectile/ProjectileEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/projectile/ProjectileEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/projectile/ProjectileEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionType.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionType.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionType.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterRemoveEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterRemoveEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterRemoveEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterRemoveEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterSpawnEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterSpawnEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterSpawnEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterSpawnEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPostTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPostTickEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPostTickEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPostTickEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPreTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPreTickEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPreTickEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPreTickEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/world/WorldEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/WorldEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/world/WorldEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/WorldEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldChangeEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldChangeEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldChangeEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldChangeEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPostTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPostTickEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPostTickEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPostTickEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPreTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPreTickEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPreTickEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPreTickEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldRenderEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldRenderEvent.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldRenderEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldRenderEvent.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeInputException.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeInputException.java similarity index 81% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeInputException.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeInputException.java index 754e3fb..d9eba5a 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeInputException.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeInputException.java @@ -2,9 +2,6 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.exceptions; -/** - * Thrown when a render pipeline FBO color channel already has an input bound. - */ public final class RenderPipeInputException extends Exception { public RenderPipeInputException(int inputFBO, int inputChannel) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeLinkerNotSetException.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeLinkerNotSetException.java similarity index 88% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeLinkerNotSetException.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeLinkerNotSetException.java index 34d413e..f56290f 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeLinkerNotSetException.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeLinkerNotSetException.java @@ -4,9 +4,6 @@ import net.minecraft.resources.ResourceLocation; -/** - * Thrown when a render pipeline's pipe linker function has not been set. - */ public final class RenderPipeLinkerNotSetException extends Exception { private ResourceLocation renderID; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeNotFoundException.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeNotFoundException.java similarity index 90% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeNotFoundException.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeNotFoundException.java index d2914f1..f187e37 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeNotFoundException.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeNotFoundException.java @@ -4,9 +4,6 @@ import net.minecraft.resources.ResourceLocation; -/** - * Thrown when a render entity's bound pipe manager cannot be found. - */ public final class RenderPipeNotFoundException extends Exception { private ResourceLocation renderID; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeOutputNotSetException.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeOutputNotSetException.java similarity index 83% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeOutputNotSetException.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeOutputNotSetException.java index 5daa2a7..00997ff 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeOutputNotSetException.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeOutputNotSetException.java @@ -4,9 +4,6 @@ import net.minecraft.resources.ResourceLocation; -/** - * Thrown when a render pipeline output has not been configured. - */ public final class RenderPipeOutputNotSetException extends Exception { public RenderPipeOutputNotSetException(ResourceLocation pipeID) { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/BlockPosExtendsKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/BlockPosExtendsKt.java new file mode 100644 index 0000000..7632149 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/BlockPosExtendsKt.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.extend; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec3; + +public final class BlockPosExtendsKt { + + private BlockPosExtendsKt() { + } + + public static BlockPos ofFloored(Vec3 vec) { + return BlockPos.containing(vec.x, vec.y, vec.z); + } +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/ItemStackExtendKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/ItemStackExtendKt.java similarity index 53% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/ItemStackExtendKt.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/ItemStackExtendKt.java index 4d9361d..b7e098c 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/ItemStackExtendKt.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/ItemStackExtendKt.java @@ -5,19 +5,12 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -/** - * Extension utilities for {@link ItemStack}. - * Originally Kotlin extension functions, ported as static utility methods. - */ public final class ItemStackExtendKt { private ItemStackExtendKt() { } - /** - * Checks whether this stack's item matches the given {@link Item}. - */ - public static boolean isOf(ItemStack stack, Item item) { + public static boolean isOf(ItemStack stack, Item item) { return stack.is(item); } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/MathExtendsKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/MathExtendsKt.java similarity index 84% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/MathExtendsKt.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/MathExtendsKt.java index 5f7e778..9ba20b7 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/MathExtendsKt.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/MathExtendsKt.java @@ -2,10 +2,6 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.extend; -/** - * Math extension utilities providing degree-to-radian conversion and a float PI constant. - * Originally Kotlin extension functions, ported as static utility methods. - */ public final class MathExtendsKt { /** Float-precision PI constant. */ diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3ExtendsKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3ExtendsKt.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3ExtendsKt.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3ExtendsKt.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3iExtendsKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3iExtendsKt.java similarity index 52% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3iExtendsKt.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3iExtendsKt.java index 076aad5..f607242 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3iExtendsKt.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3iExtendsKt.java @@ -5,19 +5,12 @@ import net.minecraft.core.Vec3i; import net.minecraft.world.phys.Vec3; -/** - * Extension utility for {@link Vec3i} providing conversion to {@link Vec3}. - * Originally a Kotlin extension function, ported as a static utility method. - */ public final class Vec3iExtendsKt { private Vec3iExtendsKt() { } - /** - * Converts a {@link Vec3i} to a {@link Vec3} (double-precision). - */ - public static Vec3 asVec3(Vec3i v) { + public static Vec3 asVec3(Vec3i v) { return new Vec3(v.getX(), v.getY(), v.getZ()); } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java similarity index 97% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java index bfc978b..ac17fea 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java @@ -44,7 +44,7 @@ public static void sendTo(ServerPlayer player, CustomPacketPayload packet) { try { PacketDistributor.sendToPlayer(player, packet); } catch (IllegalArgumentException e) { - LOGGER.debug("Player {} lacks channel — packet {} dropped", + LOGGER.debug("Player {} lacks channel --” packet {} dropped", player.getName().getString(), packet.type().id()); } catch (RuntimeException e) { LOGGER.debug("Failed to send packet {} to {}: {}", packet.type().id(), diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/EmittersPathMotion.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/EmittersPathMotion.java similarity index 85% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/EmittersPathMotion.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/EmittersPathMotion.java index 6362474..bf36414 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/EmittersPathMotion.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/EmittersPathMotion.java @@ -6,10 +6,6 @@ import com.reiasu.reiparticlesapi.network.particle.emitters.ParticleEmitters; import net.minecraft.world.phys.Vec3; -/** - * Path motion targeting a {@link ParticleEmitters}. Teleports the emitter - * along the computed path. Subclasses implement {@link #pathFunction()}. - */ public abstract class EmittersPathMotion extends AbstractPathMotion { private final ParticleEmitters targetEmitters; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/LambdaParticlePathMotion.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/LambdaParticlePathMotion.java similarity index 54% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/LambdaParticlePathMotion.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/LambdaParticlePathMotion.java index 45f8121..4613d96 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/LambdaParticlePathMotion.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/LambdaParticlePathMotion.java @@ -7,21 +7,10 @@ import java.util.function.IntFunction; -/** - * Concrete path motion that uses a lambda to compute the path offset. - * The function takes the current tick index and returns a Vec3 offset from origin. - *

- * Inherits teleport and validity logic from {@link ParticlePathMotion}. - */ public final class LambdaParticlePathMotion extends ParticlePathMotion { private final IntFunction path; - /** - * @param origin the world origin position - * @param particle the target particle - * @param path function from tick index to Vec3 offset - */ - public LambdaParticlePathMotion(Vec3 origin, ControllableParticle particle, IntFunction path) { + public LambdaParticlePathMotion(Vec3 origin, ControllableParticle particle, IntFunction path) { super(origin, particle); this.path = path; } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/ParticlePathMotion.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/ParticlePathMotion.java similarity index 84% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/ParticlePathMotion.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/ParticlePathMotion.java index 5274d15..a56207e 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/ParticlePathMotion.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/ParticlePathMotion.java @@ -6,11 +6,6 @@ import com.reiasu.reiparticlesapi.particles.ControllableParticle; import net.minecraft.world.phys.Vec3; -/** - * Path motion targeting an individual particle (ControllableParticle). - *

- * Delegates teleport and validity checks through {@link ControllableParticle}. - */ public abstract class ParticlePathMotion extends AbstractPathMotion { private final ControllableParticle particle; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/PathMotionManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/PathMotionManager.java similarity index 70% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/PathMotionManager.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/PathMotionManager.java index d4a46fa..93b6c80 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/PathMotionManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/PathMotionManager.java @@ -9,11 +9,6 @@ import java.util.Iterator; import java.util.Set; -/** - * Singleton manager that ticks all registered {@link PathMotion} instances. - * Each tick: removes invalid motions, computes the next path offset for valid ones, - * adds it to the origin, and applies the result. - */ public final class PathMotionManager { public static final PathMotionManager INSTANCE = new PathMotionManager(); private static final Set motions = new HashSet<>(); @@ -25,17 +20,11 @@ public Set getMotions() { return motions; } - /** - * Register a path motion for ticking. - */ - public void applyMotion(PathMotion motion) { + public void applyMotion(PathMotion motion) { motions.add(motion); } - /** - * Tick all registered motions. Called once per server/client tick. - */ - public void tick() { + public void tick() { Iterator iterator = motions.iterator(); while (iterator.hasNext()) { PathMotion motion = iterator.next(); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/StylePathMotion.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/StylePathMotion.java similarity index 84% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/StylePathMotion.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/StylePathMotion.java index 7237a54..41d80e9 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/StylePathMotion.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/StylePathMotion.java @@ -6,10 +6,6 @@ import com.reiasu.reiparticlesapi.network.particle.style.ParticleGroupStyle; import net.minecraft.world.phys.Vec3; -/** - * Path motion targeting a {@link ParticleGroupStyle}. Teleports the style - * along the computed path. Subclasses implement {@link #pathFunction()}. - */ public abstract class StylePathMotion extends AbstractPathMotion { private final ParticleGroupStyle targetStyle; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/AbstractPathMotion.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/AbstractPathMotion.java similarity index 68% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/AbstractPathMotion.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/AbstractPathMotion.java index 700671f..4321a60 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/AbstractPathMotion.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/AbstractPathMotion.java @@ -4,11 +4,6 @@ import net.minecraft.world.phys.Vec3; -/** - * Abstract base for path motions. Implements the tick-incrementing {@link #next()} - * method; subclasses need only provide {@link #pathFunction()}, {@link #apply(Vec3)}, - * and {@link #checkValid()}. - */ public abstract class AbstractPathMotion implements PathMotion { private Vec3 origin; private int currentTick; @@ -44,9 +39,5 @@ public Vec3 next() { return value; } - /** - * Compute the path offset for the current tick. - * Called by {@link #next()} before the tick counter is incremented. - */ - public abstract Vec3 pathFunction(); + public abstract Vec3 pathFunction(); } diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/PathMotion.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/PathMotion.java new file mode 100644 index 0000000..e4857c9 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/PathMotion.java @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.network.animation.api; + +import net.minecraft.world.phys.Vec3; + +public interface PathMotion { + int getCurrentTick(); + + void setCurrentTick(int tick); + + Vec3 getOrigin(); + + void setOrigin(Vec3 origin); + + void apply(Vec3 actualPos); + + Vec3 next(); + + boolean checkValid(); +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/AbstractControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/AbstractControllerBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/AbstractControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/AbstractControllerBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/BooleanControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/BooleanControllerBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/BooleanControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/BooleanControllerBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java similarity index 94% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java index 3f77977..7dfdb95 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java @@ -6,9 +6,6 @@ import java.nio.ByteBuffer; -/** - * Buffer for single char (2-byte) values. - */ public final class CharControllerBuffer extends AbstractControllerBuffer { public static final ParticleControllerDataBuffer.Id ID = new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "char")); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/DoubleControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/DoubleControllerBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/DoubleControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/DoubleControllerBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/EmptyControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/EmptyControllerBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/EmptyControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/EmptyControllerBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/FloatControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/FloatControllerBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/FloatControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/FloatControllerBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntArrayControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntArrayControllerBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntArrayControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntArrayControllerBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntControllerBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntControllerBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongArrayControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongArrayControllerBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongArrayControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongArrayControllerBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongControllerBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongControllerBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java similarity index 94% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java index ab2cb9c..8f93789 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java @@ -12,10 +12,6 @@ import java.util.ArrayList; import java.util.List; -/** - * Buffer that contains a list of nested ParticleControllerDataBuffer entries. - * Encodes as: [count:int] then for each entry: [idLen:int][idString][dataLen:int][data]. - */ public final class NestedBuffersControllerBuffer extends AbstractControllerBuffer>> { public static final ParticleControllerDataBuffer.Id ID = new ParticleControllerDataBuffer.Id(ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "nested_buffers")); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffers.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffers.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffers.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffers.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/RelativeLocationControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/RelativeLocationControllerBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/RelativeLocationControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/RelativeLocationControllerBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ShortControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ShortControllerBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ShortControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ShortControllerBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/StringControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/StringControllerBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/StringControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/StringControllerBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/UUIDControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/UUIDControllerBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/UUIDControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/UUIDControllerBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/Vec3dControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/Vec3dControllerBuffer.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/buffer/Vec3dControllerBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/Vec3dControllerBuffer.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacket.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacket.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacket.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacket.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketCameraShakeS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketCameraShakeS2C.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketCameraShakeS2C.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketCameraShakeS2C.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketDisplayEntityS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketDisplayEntityS2C.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketDisplayEntityS2C.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketDisplayEntityS2C.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketKeyActionC2S.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketKeyActionC2S.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketKeyActionC2S.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketKeyActionC2S.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleCompositionS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleCompositionS2C.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleCompositionS2C.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleCompositionS2C.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleEmittersS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleEmittersS2C.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleEmittersS2C.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleEmittersS2C.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleGroupS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleGroupS2C.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleGroupS2C.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleGroupS2C.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleS2C.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleS2C.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleS2C.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleStyleS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleStyleS2C.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleStyleS2C.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleStyleS2C.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketRenderEntityS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketRenderEntityS2C.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketRenderEntityS2C.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketRenderEntityS2C.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientCameraShakeHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientCameraShakeHandler.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientCameraShakeHandler.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientCameraShakeHandler.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientDisplayEntityPacketHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientDisplayEntityPacketHandler.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientDisplayEntityPacketHandler.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientDisplayEntityPacketHandler.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleCompositionHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleCompositionHandler.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleCompositionHandler.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleCompositionHandler.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleEmittersPacketHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleEmittersPacketHandler.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleEmittersPacketHandler.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleEmittersPacketHandler.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleGroupPacketHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleGroupPacketHandler.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleGroupPacketHandler.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleGroupPacketHandler.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticlePacketHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticlePacketHandler.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticlePacketHandler.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticlePacketHandler.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleStylePacketHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleStylePacketHandler.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleStylePacketHandler.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleStylePacketHandler.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientRenderEntityPacketHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientRenderEntityPacketHandler.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientRenderEntityPacketHandler.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientRenderEntityPacketHandler.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/server/listener/ServerKeyActionHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/server/listener/ServerKeyActionHandler.java similarity index 88% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/server/listener/ServerKeyActionHandler.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/server/listener/ServerKeyActionHandler.java index e0b3bc8..adc6011 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/packet/server/listener/ServerKeyActionHandler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/server/listener/ServerKeyActionHandler.java @@ -2,6 +2,7 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet.server.listener; +import net.neoforged.neoforge.common.NeoForge; import com.reiasu.reiparticlesapi.event.ReiEventBus; import com.reiasu.reiparticlesapi.event.events.key.KeyActionEvent; import com.reiasu.reiparticlesapi.network.packet.PacketKeyActionC2S; @@ -12,7 +13,7 @@ private ServerKeyActionHandler() { } public static void receive(PacketKeyActionC2S packet, ServerPlayer player) { - ReiEventBus.call(new KeyActionEvent( + NeoForge.EVENT_BUS.post(new KeyActionEvent( player, packet.keyId(), packet.action(), diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/SequencedServerParticleGroup.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/SequencedServerParticleGroup.java similarity index 97% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/SequencedServerParticleGroup.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/SequencedServerParticleGroup.java index 469a8bd..f92dec4 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/SequencedServerParticleGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/SequencedServerParticleGroup.java @@ -9,10 +9,6 @@ import java.util.HashMap; import java.util.Map; -/** - * A {@link ServerParticleGroup} that manages sequenced (indexed) particles, - * allowing individual particles to be toggled on/off by index. - */ public abstract class SequencedServerParticleGroup extends ServerParticleGroup { private final long[] clientIndexStatus; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerController.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerController.java similarity index 67% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerController.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerController.java index 71cb13c..2681bf2 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerController.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerController.java @@ -9,11 +9,7 @@ public interface ServerController { default void tick() { } - /** - * Spawn this controller's visual representation in the world. - * Override in each implementation to dispatch to the appropriate manager. - */ - default void spawnInWorld(ServerLevel world, Vec3 pos) { + default void spawnInWorld(ServerLevel world, Vec3 pos) { } default boolean getCanceled() { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java similarity index 94% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java index 9b94b85..c6968af 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java @@ -22,13 +22,6 @@ import java.util.UUID; import java.util.function.Consumer; -/** - * Server-side particle group that manages a set of particles with shared - * lifecycle, transform, and network synchronization. - *

- * Subclasses define the particle shape via {@link #getClientType()} and - * {@link #otherPacketArgs()}, and respond to lifecycle callbacks. - */ public abstract class ServerParticleGroup implements ServerController { private double visibleRange; @@ -63,9 +56,6 @@ public ServerParticleGroup() { public void spawnInWorld(ServerLevel world, Vec3 pos) { ServerParticleGroupManager.INSTANCE.addParticleGroup(this, pos, world); } - - // ---- Getters / Setters ---- - public double getVisibleRange() { return visibleRange; } public void setVisibleRange(double visibleRange) { this.visibleRange = visibleRange; } public UUID getUuid() { return uuid; } @@ -89,9 +79,6 @@ public void spawnInWorld(ServerLevel world, Vec3 pos) { public void setMaxTick(int maxTick) { this.maxTick = maxTick; } public RelativeLocation getAxis() { return axis; } public void setAxis(RelativeLocation axis) { this.axis = axis; } - - // ---- Abstract methods ---- - public abstract Map> otherPacketArgs(); public abstract Class getClientType(); public abstract void onGroupDisplay(Vec3 pos, ServerLevel world); @@ -99,9 +86,6 @@ public void spawnInWorld(ServerLevel world, Vec3 pos) { public abstract void onClientViewDeath(); public abstract void doTickClient(); public abstract void doTickAlive(); - - // ---- Lifecycle ---- - @Override public void tick() { if (canceled) return; @@ -136,9 +120,6 @@ public void remove() { } ServerParticleGroupManager.INSTANCE.removeParticleGroup(this); } - - // ---- Player / Entity binding ---- - public void withPlayerStats(Player player) { if (player == null) return; this.pos = player.position(); @@ -148,9 +129,6 @@ public void withEntityStats(LivingEntity entity) { if (entity == null) return; this.pos = entity.position(); } - - // ---- Transform operations ---- - public void setAxis(Vec3 axisVec) { this.axis = RelativeLocation.Companion.of(axisVec); Map> args = new HashMap<>(); @@ -226,16 +204,10 @@ public void changeMaxTick(int newMaxTick) { ParticleControllerDataBuffers.INSTANCE.intValue(newMaxTick)); change(g -> g.maxTick = newMaxTick, args); } - - // ---- Spawn ---- - public void spawn(Level world, Vec3 pos) { if (!(world instanceof ServerLevel serverLevel)) return; ServerParticleGroupManager.INSTANCE.addParticleGroup(this, pos, serverLevel); } - - // ---- Change broadcast ---- - public void change(Consumer toggleMethod, Map> args) { if (world == null) return; Set visible = ServerParticleGroupManager.INSTANCE.filterVisiblePlayer(this); @@ -247,9 +219,6 @@ public void change(Consumer toggleMethod, Map filterVisiblePlayer(ServerParticleGroup group) { + public Set filterVisiblePlayer(ServerParticleGroup group) { Set players = groupToPlayers.get(group.getUuid()); return players != null ? new HashSet<>(players) : new HashSet<>(); } - /** - * Called each server tick to update all groups and manage visibility. - */ - public void upgrade(MinecraftServer server) { + public void upgrade(MinecraftServer server) { if (server == null) return; clearOfflineVisible(server); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoParticleComposition.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoParticleComposition.java similarity index 81% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoParticleComposition.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoParticleComposition.java index 0e43984..e1273ba 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoParticleComposition.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoParticleComposition.java @@ -7,10 +7,6 @@ import java.util.Collections; import java.util.Map; -/** - * Placeholder composition that auto-manages itself. - * Will be expanded as more of the original API is ported. - */ public class AutoParticleComposition extends ParticleComposition { @Override diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoSequencedParticleComposition.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoSequencedParticleComposition.java similarity index 52% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoSequencedParticleComposition.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoSequencedParticleComposition.java index ddfb3fd..30896f3 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoSequencedParticleComposition.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoSequencedParticleComposition.java @@ -7,17 +7,6 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; -/** - * Abstract sequenced composition that auto-generates its network codec - * via {@link ParticleCompositionHelper}. - *

- * Subclasses must: - *

    - *
  • Provide a public constructor {@code (Vec3, Level)}
  • - *
  • Annotate serializable fields with {@link com.reiasu.reiparticlesapi.annotations.CodecField}
  • - *
  • Implement {@link #getParticleSequenced()} and {@link #onDisplay()}
  • - *
- */ public abstract class AutoSequencedParticleComposition extends SequencedParticleComposition { protected AutoSequencedParticleComposition(Vec3 position, Level world) { @@ -28,12 +17,7 @@ protected AutoSequencedParticleComposition(Vec3 position) { super(position); } - /** - * Returns the auto-generated codec for this composition type. - * Uses reflection to serialize all {@link com.reiasu.reiparticlesapi.annotations.CodecField} - * annotated fields. - */ - public BufferCodec getCodec() { + public BufferCodec getCodec() { return ParticleCompositionHelper.INSTANCE.generateCodec(this); } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/CompositionData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/CompositionData.java similarity index 74% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/CompositionData.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/CompositionData.java index 7ad27ec..743d17b 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/CompositionData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/CompositionData.java @@ -13,22 +13,6 @@ import java.util.function.Consumer; import java.util.function.Supplier; -/** - * Data attached to each particle entry in a {@link ParticleComposition}. - *

- * Each instance carries a unique {@link UUID} that identifies it within - * the composition, and an {@code order} value used for sequenced display. - *

- * Client-side fields: - *

    - *
  • {@link #displayerBuilder} — factory that creates the {@link ParticleDisplayer} - * for this entry (e.g. single-particle, group, style).
  • - *
  • {@link #particleInit} — callback run once when the particle controller - * is first loaded (optional).
  • - *
  • {@link #controllable} — the {@link Controllable} handle returned by the - * displayer after spawning. Used for teleport/remove/rotate operations.
  • - *
- */ public class CompositionData implements Comparable { private final UUID uuid = UUID.randomUUID(); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleComposition.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleComposition.java similarity index 71% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleComposition.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleComposition.java index 1dcb824..5a1ae9e 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleComposition.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleComposition.java @@ -22,18 +22,10 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; -/** - * Base class for particle compositions — groups of particles managed as a unit. - *

- * Manages both server-side state (serialization, rotation, scaling, pre-tick - * action queue) and client-side particle display via {@link ParticleDisplayer}. - * Each particle entry is represented by a {@link CompositionData} which can - * carry a displayer builder, init callback, and a {@link Controllable} handle. - */ public abstract class ParticleComposition implements ServerController, Controllable { - // ─── Companion-style static encode/decode ──────────────────────────── + // --”€--”€--”€ Companion-style static encode/decode --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ public static void encodeBase(ParticleComposition data, FriendlyByteBuf buf) { buf.writeUUID(data.controlUUID); @@ -65,7 +57,7 @@ public static void decodeBase(ParticleComposition instance, FriendlyByteBuf buf) instance.status.updateCurrent(buf.readInt()); } - // ─── Fields ────────────────────────────────────────────────────────── + // --”€--”€--”€ Fields --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ private Vec3 position; private Level world; @@ -86,7 +78,7 @@ public static void decodeBase(ParticleComposition instance, FriendlyByteBuf buf) private int maxTick = -1; private boolean flushed; - // ─── Constructors ──────────────────────────────────────────────────── + // --”€--”€--”€ Constructors --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ protected ParticleComposition() { this(Vec3.ZERO, null); @@ -97,19 +89,13 @@ protected ParticleComposition(Vec3 position, Level world) { this.world = world; } - // ─── Abstract methods ──────────────────────────────────────────────── + // --”€--”€--”€ Abstract methods --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ - /** - * Returns the particle-data-to-location mapping that defines this composition's shape. - */ - public abstract Map getParticles(); + public abstract Map getParticles(); - /** - * Called once after display is first invoked. - */ - public abstract void onDisplay(); + public abstract void onDisplay(); - // ─── Property accessors ────────────────────────────────────────────── + // --”€--”€--”€ Property accessors --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ public Vec3 getPosition() { return position; @@ -212,27 +198,19 @@ public void setMaxTick(int maxTick) { this.maxTick = maxTick; } - // ─── Pre-tick actions ──────────────────────────────────────────────── + // --”€--”€--”€ Pre-tick actions --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ - /** - * Adds a pre-tick action that runs every tick before the main tick logic. - * This is the Forge Java adaptation of the original Kotlin - * {@code Function1} callbacks. - */ - public ParticleComposition addPreTickAction(Consumer action) { + public ParticleComposition addPreTickAction(Consumer action) { invokeQueue.add(action); return this; } - /** - * Overload accepting a simple {@link Runnable} for convenience. - */ - public ParticleComposition addPreTickAction(Runnable action) { + public ParticleComposition addPreTickAction(Runnable action) { invokeQueue.add(pc -> action.run()); return this; } - // ─── Lifecycle ─────────────────────────────────────────────────────── + // --”€--”€--”€ Lifecycle --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ @Override public void tick() { @@ -272,11 +250,7 @@ public void flush() { displayParticles(); } - /** - * Clears all particles. If {@code cancel} is true, the composition - * is marked as canceled. - */ - public void clear(boolean cancel) { + public void clear(boolean cancel) { if (client) { for (CompositionData data : displayedEntries) { Controllable ctrl = data.getControllable(); @@ -315,16 +289,13 @@ public void update(ParticleComposition other) { CodecHelper.INSTANCE.updateFields(this, other); } - // ─── Display / particles ───────────────────────────────────────────── + // --”€--”€--”€ Display / particles --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ public void beforeDisplay(Map map) { // Override in subclass to modify locations before display } - /** - * Called by {@link #flush()} to actually create particles. - */ - protected void displayParticles() { + protected void displayParticles() { if (!client) return; Map locations = getParticles(); beforeDisplay(locations); @@ -337,11 +308,7 @@ protected void displayParticles() { } } - /** - * Displays a single particle entry using its {@link ParticleDisplayer}. - * If no displayer builder is set on the data, only the rotated location is tracked. - */ - protected void displayEntry(CompositionData data, RelativeLocation pos) { + protected void displayEntry(CompositionData data, RelativeLocation pos) { particleRotatedLocations.add(pos); displayedEntries.add(data); if (!client) return; @@ -360,10 +327,7 @@ protected void displayEntry(CompositionData data, RelativeLocation pos) { } } - /** - * Applies scale to particle locations based on their default lengths. - */ - public void toggleScale(Map locations) { + public void toggleScale(Map locations) { if (canceled) return; if (particleDefaultLength.isEmpty()) { for (Map.Entry entry : locations.entrySet()) { @@ -383,11 +347,7 @@ public void toggleScale(Map locations) { } } - /** - * Teleports all particles to their rotated positions relative to the - * composition origin. - */ - public void toggleRelative() { + public void toggleRelative() { if (!client) return; int size = Math.min(displayedEntries.size(), particleRotatedLocations.size()); for (int i = 0; i < size; i++) { @@ -404,7 +364,7 @@ public ParticleComposition setDisabledInterval(int interval) { return this; } - // ─── Rotation ──────────────────────────────────────────────────────── + // --”€--”€--”€ Rotation --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ public void rotateToPoint(RelativeLocation to) { if (!client) { @@ -445,7 +405,7 @@ public void rotateAsAxis(double radian) { toggleRelative(); } - // ─── Pre-rotation helpers (used before display) ────────────────────── + // --”€--”€--”€ Pre-rotation helpers (used before display) --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ public void preRotateTo(Map map, RelativeLocation to) { Math3DUtil.rotatePointsToPoint(new ArrayList<>(map.values()), to, axis); @@ -461,7 +421,7 @@ public void preRotateAsAxis(Map map, double a Math3DUtil.rotateAsAxis(new ArrayList<>(map.values()), axis, angle); } - // ─── Controllable interface support ─────────────────────────────────── + // --”€--”€--”€ Controllable interface support --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ @Override public UUID controlUUID() { @@ -484,11 +444,7 @@ public ParticleComposition getControlObject() { return this; } - /** - * Provides compatibility with code that expects a {@code Controllable}-style API. - * Used internally by CompositionStatusHelper via loadController(Controllable). - */ - public void loadController(Object controller) { + public void loadController(Object controller) { // Handled by CompositionStatusHelper via loadController(Controllable) } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleShapeComposition.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleShapeComposition.java similarity index 97% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleShapeComposition.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleShapeComposition.java index 6df31db..d6ff34e 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleShapeComposition.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleShapeComposition.java @@ -98,6 +98,6 @@ public Map getParticles() { @Override public void onDisplay() { - // No-op — this class uses its own tick-based rendering + // No-op --” this class uses its own tick-based rendering } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleComposition.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleComposition.java similarity index 71% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleComposition.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleComposition.java index 7c8ba13..675b900 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleComposition.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleComposition.java @@ -18,19 +18,9 @@ import java.util.SortedMap; import java.util.UUID; -/** - * Abstract composition that manages particles in a sequenced (indexed) manner. - *

- * Each particle slot is tracked by a bit in a {@code long[]} bit-set. Particles - * can be added/removed one at a time via {@link #addSingle()}/{@link #removeSingle()}, - * or in batches via {@link #addMultiple(int)}/{@link #removeMultiple(int)}. - *

- * The {@link #getAnimate() animate} helper allows defining predicate-gated - * animation steps that automatically add/remove particles over time. - */ public abstract class SequencedParticleComposition extends ParticleComposition { - // ─── Static encode/decode ──────────────────────────────────────────── + // --”€--”€--”€ Static encode/decode --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ public static void encodeBase(SequencedParticleComposition data, FriendlyByteBuf buf) { ParticleComposition.encodeBase(data, buf); @@ -48,7 +38,7 @@ public static void decodeBase(SequencedParticleComposition instance, FriendlyByt instance.index.setMemoValue(buf.readLongArray()); } - // ─── Fields ────────────────────────────────────────────────────────── + // --”€--”€--”€ Fields --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ private final SequencedCompositionAnimationHelper animate; private int count; @@ -58,7 +48,7 @@ public static void decodeBase(SequencedParticleComposition instance, FriendlyByt private final ArrayList> sequencedParticlesData = new ArrayList<>(); private UUID[] indexToUuid = new UUID[0]; - // ─── Constructors ──────────────────────────────────────────────────── + // --”€--”€--”€ Constructors --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ protected SequencedParticleComposition(Vec3 position, Level world) { super(position, world); @@ -74,7 +64,7 @@ protected SequencedParticleComposition(Vec3 position) { this(position, null); } - // ─── Property accessors ────────────────────────────────────────────── + // --”€--”€--”€ Property accessors --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ public SequencedCompositionAnimationHelper getAnimate() { return animate; @@ -116,14 +106,11 @@ protected ArrayList> getSequencedPa return sequencedParticlesData; } - // ─── Abstract method ───────────────────────────────────────────────── + // --”€--”€--”€ Abstract method --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ - /** - * Returns the sequenced particle map (ordered by CompositionData). - */ - public abstract SortedMap getParticleSequenced(); + public abstract SortedMap getParticleSequenced(); - // ─── Overrides from ParticleComposition ────────────────────────────── + // --”€--”€--”€ Overrides from ParticleComposition --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ @Override public Map getParticles() { @@ -162,11 +149,7 @@ public void display() { onDisplay(); } - /** - * Called before the sequenced particles are displayed. Subclasses - * can override to modify the map before display. - */ - public void beforeDisplaySequenced(SortedMap map) { + public void beforeDisplaySequenced(SortedMap map) { // Override point } @@ -212,7 +195,7 @@ public void update(ParticleComposition other) { applyIndexDiff(oldIndex, index.get()); } - // ─── Rotation overrides ────────────────────────────────────────────── + // --”€--”€--”€ Rotation overrides --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ @Override public void rotateToPoint(RelativeLocation to) { @@ -256,12 +239,9 @@ public void rotateAsAxis(double radian) { toggleRelative(); } - // ─── Sequenced add/remove API ──────────────────────────────────────── + // --”€--”€--”€ Sequenced add/remove API --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ - /** - * Displays the particle at the current index and advances. - */ - public void addSingle() { + public void addSingle() { if (count <= 0) return; if (serverCurrentIndex < 0 || serverCurrentIndex >= count) return; @@ -282,10 +262,7 @@ public void addMultiple(int amount) { } } - /** - * Hides the particle at the current index and retreats. - */ - public void removeSingle() { + public void removeSingle() { if (count <= 0) return; int idx = Math.min(serverCurrentIndex, count - 1); if (idx < 0 || idx >= count) return; @@ -306,10 +283,7 @@ public void removeMultiple(int amount) { } } - /** - * Resets all particles to hidden and resets counters. - */ - public void resetAll() { + public void resetAll() { if (getClient() && count > 0) { int pages = pagesFor(count); long[] bits = index.get(); @@ -334,7 +308,7 @@ public void resetAll() { serverCurrentIndex = 0; } - // ─── Bit-set status management ─────────────────────────────────────── + // --”€--”€--”€ Bit-set status management --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ public void setParticleStatus(int index, boolean generated) { if (index < 0 || index >= count) return; @@ -346,7 +320,7 @@ public boolean isParticleDisplayed(int index) { return getBit(this.index.get(), index); } - // ─── Index-based create/remove (client-side) ───────────────────────── + // --”€--”€--”€ Index-based create/remove (client-side) --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ private void createWithIndex(int i) { if (!getClient()) return; @@ -381,7 +355,7 @@ private void removeWithIndex(int i) { indexToUuid[i] = null; } - // ─── Index diff application ────────────────────────────────────────── + // --”€--”€--”€ Index diff application --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ private void applyIndexDiff(long[] oldBits, long[] newBits) { if (!getClient()) return; @@ -411,7 +385,7 @@ private void applyIndexDiff(long[] oldBits, long[] newBits) { } } - // ─── Internal helpers ──────────────────────────────────────────────── + // --”€--”€--”€ Internal helpers --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ private void ensureIndexCapacity(int newCount) { int pages = pagesFor(newCount); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleShapeComposition.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleShapeComposition.java similarity index 66% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleShapeComposition.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleShapeComposition.java index 4ed3e71..e643f6f 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleShapeComposition.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleShapeComposition.java @@ -22,14 +22,6 @@ import java.util.function.Function; import java.util.concurrent.atomic.AtomicInteger; -/** - * Concrete sequenced composition that builds its particle map from a list of - * {@link PointsBuilder} instances, each paired with a data-supplier function. - *

- * Provides fluent API for adding points/builders, configuring scale helpers, - * and registering display/pre-display actions. Intended for client-side - * embedded use within other compositions. - */ public final class SequencedParticleShapeComposition extends SequencedParticleComposition { private final List>> points = new ArrayList<>(); @@ -46,7 +38,7 @@ public SequencedParticleShapeComposition(UUID uuid) { setControlUUID(uuid); } - // ─── Property accessors ────────────────────────────────────────────── + // --”€--”€--”€ Property accessors --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ public int getSpawnAge() { return spawnAge; @@ -64,12 +56,9 @@ public boolean getScaleReversed() { return scaleReversed; } - // ─── Scale helper configuration ────────────────────────────────────── + // --”€--”€--”€ Scale helper configuration --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ - /** - * Configures a linear scale helper. - */ - public SequencedParticleShapeComposition loadScaleHelper(double min, double max, int scalingTick) { + public SequencedParticleShapeComposition loadScaleHelper(double min, double max, int scalingTick) { CompositionScaleHelper helper = new CompositionScaleHelper(min, max, scalingTick); helper.loadComposition(this); this.scaleHelper = helper; @@ -77,10 +66,7 @@ public SequencedParticleShapeComposition loadScaleHelper(double min, double max, return this; } - /** - * Configures a bezier-curved scale helper. - */ - public SequencedParticleShapeComposition loadScaleHelperBezierValue( + public SequencedParticleShapeComposition loadScaleHelperBezierValue( double minScale, double maxScale, int scaleTick, RelativeLocation c1, RelativeLocation c2) { CompositionBezierScaleHelper helper = new CompositionBezierScaleHelper(scaleTick, minScale, maxScale, c1, c2); @@ -90,31 +76,22 @@ public SequencedParticleShapeComposition loadScaleHelperBezierValue( return this; } - // ─── Display action registration ───────────────────────────────────── + // --”€--”€--”€ Display action registration --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ - /** - * Registers an action to run after display is invoked. - */ - public SequencedParticleShapeComposition applyDisplayAction(Consumer action) { + public SequencedParticleShapeComposition applyDisplayAction(Consumer action) { invokes.add(action); return this; } - /** - * Registers an action to run before particles are displayed (receives the sorted map). - */ - public SequencedParticleShapeComposition applyBeforeDisplayAction( + public SequencedParticleShapeComposition applyBeforeDisplayAction( BiFunction, Void> action) { beforeInvokes.add(action); return this; } - // ─── Point registration ────────────────────────────────────────────── + // --”€--”€--”€ Point registration --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ - /** - * Adds a single point with a data supplier that receives both the point and an order index. - */ - public SequencedParticleShapeComposition applyPoint( + public SequencedParticleShapeComposition applyPoint( RelativeLocation point, BiFunction dataSupplier) { points.add(new AbstractMap.SimpleEntry<>( @@ -124,10 +101,7 @@ public SequencedParticleShapeComposition applyPoint( return this; } - /** - * Adds a single point with a data supplier that only receives the RelativeLocation. - */ - public SequencedParticleShapeComposition applyPointRel( + public SequencedParticleShapeComposition applyPointRel( RelativeLocation point, Function dataSupplier) { points.add(new AbstractMap.SimpleEntry<>( @@ -137,10 +111,7 @@ public SequencedParticleShapeComposition applyPointRel( return this; } - /** - * Adds a single point with a data supplier that only receives the order index. - */ - public SequencedParticleShapeComposition applyPointI( + public SequencedParticleShapeComposition applyPointI( RelativeLocation point, Function dataSupplier) { points.add(new AbstractMap.SimpleEntry<>( @@ -150,20 +121,14 @@ public SequencedParticleShapeComposition applyPointI( return this; } - /** - * Adds all points from a builder, with a data supplier that receives both point and order. - */ - public SequencedParticleShapeComposition applyBuilder( + public SequencedParticleShapeComposition applyBuilder( PointsBuilder builder, BiFunction dataSupplier) { points.add(new AbstractMap.SimpleEntry<>(builder, dataSupplier)); return this; } - /** - * Adds all points from a builder, with a data supplier that only receives the order index. - */ - public SequencedParticleShapeComposition applyBuilderI( + public SequencedParticleShapeComposition applyBuilderI( PointsBuilder builder, Function dataSupplier) { points.add(new AbstractMap.SimpleEntry<>( @@ -173,10 +138,7 @@ public SequencedParticleShapeComposition applyBuilderI( return this; } - /** - * Adds all points from a builder, with a data supplier that only receives the RelativeLocation. - */ - public SequencedParticleShapeComposition applyBuilderRel( + public SequencedParticleShapeComposition applyBuilderRel( PointsBuilder builder, Function dataSupplier) { points.add(new AbstractMap.SimpleEntry<>( @@ -186,12 +148,9 @@ public SequencedParticleShapeComposition applyBuilderRel( return this; } - // ─── Scale-reversal on status change ───────────────────────────────── + // --”€--”€--”€ Scale-reversal on status change --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ - /** - * Enables reversed scaling when the given status helper enters DISABLE state. - */ - public SequencedParticleShapeComposition setReversedScaleOnDisableStatus(StatusHelper status) { + public SequencedParticleShapeComposition setReversedScaleOnDisableStatus(StatusHelper status) { addPreTickAction(pc -> { if (status.getDisplayStatus() == StatusHelper.Status.DISABLE.id()) { scaleReversed = true; @@ -200,10 +159,7 @@ public SequencedParticleShapeComposition setReversedScaleOnDisableStatus(StatusH return this; } - /** - * Enables reversed scaling when the given composition's status enters DISABLE. - */ - public SequencedParticleShapeComposition setReversedScaleOnCompositionStatus(ParticleComposition composition) { + public SequencedParticleShapeComposition setReversedScaleOnCompositionStatus(ParticleComposition composition) { addPreTickAction(pc -> { if (composition.getStatus().getCurrentStatus() == StatusHelper.Status.DISABLE) { scaleReversed = true; @@ -212,7 +168,7 @@ public SequencedParticleShapeComposition setReversedScaleOnCompositionStatus(Par return this; } - // ─── Abstract/override implementations ─────────────────────────────── + // --”€--”€--”€ Abstract/override implementations --”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€--”€ @Override public SortedMap getParticleSequenced() { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/manager/ParticleCompositionManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/manager/ParticleCompositionManager.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/manager/ParticleCompositionManager.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/manager/ParticleCompositionManager.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeData.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeData.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeData.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeDataKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeDataKt.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeDataKt.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeDataKt.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeData.java similarity index 91% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeData.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeData.java index 3fe5539..21233e3 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeData.java @@ -4,9 +4,6 @@ import java.util.concurrent.ThreadLocalRandom; -/** - * A range of float values with random sampling support. - */ public final class FloatRangeData { private final float min; private final float max; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeDataKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeDataKt.java similarity index 83% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeDataKt.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeDataKt.java index fcfba16..85827ee 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeDataKt.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeDataKt.java @@ -2,10 +2,6 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.data; -/** - * Kotlin-style extension utilities for FloatRangeData. - * In pure Java, these serve as static helper methods. - */ public final class FloatRangeDataKt { private FloatRangeDataKt() { } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeData.java similarity index 56% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeData.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeData.java index 542b20b..0e866e9 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeData.java @@ -4,22 +4,13 @@ import java.util.concurrent.ThreadLocalRandom; -/** - * A range of integer values with random sampling support. - *

- * The {@link #random()} method returns a value in {@code [min, max)} following - * the original Kotlin Random.nextInt(min, max) semantics. - */ public final class IntRangeData extends RangeData { public IntRangeData(int min, int max) { super(min, max); } - /** - * Returns a random integer in {@code [min, max)}. - */ - public int random() { + public int random() { return ThreadLocalRandom.current().nextInt(getMin(), getMax()); } } diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeDataKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeDataKt.java new file mode 100644 index 0000000..26adec3 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeDataKt.java @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.network.particle.data; + +public final class IntRangeDataKt { + + private IntRangeDataKt() { + } + + public static boolean isIn(int value, IntRangeData range) { + return value >= range.getMin() && value <= range.getMax(); + } + + public static IntRangeData minRangeTo(int min, int max) { + return new IntRangeData(min, max); + } + + public static IntRangeData maxRangeTo(int max, int min) { + return new IntRangeData(min, max); + } +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/RangeData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/RangeData.java similarity index 77% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/RangeData.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/RangeData.java index fa2eb7d..e16c1d2 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/RangeData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/RangeData.java @@ -2,12 +2,6 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.data; -/** - * Abstract base class for a min-max range of comparable values. - * Enforces the invariant that {@code min <= max} at construction time. - * - * @param the value type, must be self-comparable - */ public abstract class RangeData> { private T min; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/SerializableData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/SerializableData.java new file mode 100644 index 0000000..69539c4 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/SerializableData.java @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.network.particle.data; + +import com.reiasu.reiparticlesapi.particles.ParticleDisplayer; + +public interface SerializableData { + + SerializableData clone(); + + ParticleDisplayer createDisplayer(); +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/AutoParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/AutoParticleEmitters.java similarity index 73% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/AutoParticleEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/AutoParticleEmitters.java index 45dc077..f6e5b06 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/AutoParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/AutoParticleEmitters.java @@ -7,15 +7,6 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; -/** - * Base class for emitters registered via {@code @ReiAutoRegister}. - *

- * Convention: subclasses declare - * {@code public static final ResourceLocation CODEC_ID = ...;} - * This constructor auto-reads that field and calls - * {@link #setEmittersID(ResourceLocation)} so every instance is - * immediately sync-ready without manual wiring. - */ public class AutoParticleEmitters extends ParticleEmitters { protected AutoParticleEmitters() { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassEmitters.java similarity index 88% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassEmitters.java index 0ba9675..6ad6436 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassEmitters.java @@ -30,11 +30,6 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; -/** - * Abstract emitter class that adds physics simulation, wind, event handlers, - * interpolation, and particle spawning on top of ParticleEmitters. - * Server-side port of the Fabric ClassEmitters. - */ public abstract class ClassEmitters extends ParticleEmitters { private static final Logger LOGGER = LogUtils.getLogger(); @@ -58,9 +53,6 @@ public ClassEmitters(Vec3 pos, Level world) { bind(world, pos.x, pos.y, pos.z); } } - - // ---- Event handlers ---- - public void addEventHandler(ParticleEventHandler handler, boolean innerClass) { if (handler == null) return; String id = handler.getHandlerID(); @@ -86,9 +78,6 @@ public List collectEventHandles() { public ConcurrentHashMap> getHandlerList() { return handlerList; } - - // ---- Physics properties ---- - public double getAirDensity() { return airDensity; } @@ -112,9 +101,6 @@ public double getMass() { public void setMass(double mass) { this.mass = mass; } - - // ---- Wind ---- - public WindDirection getWind() { return wind; } @@ -124,9 +110,6 @@ public void setWind(WindDirection wind) { this.wind = wind; } } - - // ---- Interpolator ---- - public boolean getEnableInterpolator() { return enableInterpolator; } @@ -144,9 +127,6 @@ public void setEmittersInterpolator(Interpolator interpolator) { this.emittersInterpolator = interpolator; } } - - // ---- Delay / Playing ---- - public int getDelay() { return delay; } @@ -162,9 +142,6 @@ public boolean getPlaying() { public void setPlaying(boolean playing) { this.playing = playing; } - - // ---- Lifecycle ---- - public void start() { playing = true; } @@ -177,35 +154,17 @@ public void spawn(Level world, Vec3 pos) { if (world == null || pos == null) return; bind(world, pos.x, pos.y, pos.z); } + public abstract void doTick(); - // ---- Abstract methods ---- - - /** - * Called each tick when the emitter is playing and past its delay. - */ - public abstract void doTick(); - - /** - * Per-particle action called during spawning. - */ - public abstract void singleParticleAction( + public abstract void singleParticleAction( Controllable controller, SerializableData data, RelativeLocation spawnPos, Level spawnWorld, float particleLerpProgress, float posLerpProgress); - /** - * Generate particle data list for the current tick. - */ - public List> genParticles(float lerpProgress) { + public List> genParticles(float lerpProgress) { return Collections.emptyList(); } - - // ---- Physics ---- - - /** - * Update physics for a single particle: apply gravity, wind, and drag. - */ - public void updatePhysics(Vec3 pos, ControllableParticleData data, ControllableParticle particle) { + public void updatePhysics(Vec3 pos, ControllableParticleData data, ControllableParticle particle) { if (data == null || particle == null) return; Vec3 velocity = data.getVelocity(); @@ -226,9 +185,6 @@ public void updatePhysics(Vec3 pos, ControllableParticleData data, ControllableP data.setVelocity(velocity); } - - // ---- Tick override ---- - @Override protected void emitTick() { if (!playing) return; @@ -237,15 +193,9 @@ protected void emitTick() { doTick(); } - /** - * Spawn a particle at the given position with lerp progress. - */ - public void spawnParticle(Vec3 spawnPos, float lerpProgress) { + public void spawnParticle(Vec3 spawnPos, float lerpProgress) { // Server-side: override in subclasses for actual spawning } - - // ---- Encode/Decode ---- - public static final class Companion { private Companion() { } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassParticleEmitters.java similarity index 85% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassParticleEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassParticleEmitters.java index d93654b..6d32d65 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassParticleEmitters.java @@ -13,11 +13,6 @@ import java.util.SortedMap; -/** - * Extended emitter class that adds shoot types, command queues, - * collision detection, and per-particle physics on top of ClassEmitters. - * Server-side port of the Fabric ClassParticleEmitters. - */ public abstract class ClassParticleEmitters extends ClassEmitters { public static final Companion Companion = new Companion(); @@ -30,9 +25,6 @@ public abstract class ClassParticleEmitters extends ClassEmitters { public ClassParticleEmitters(Vec3 pos, Level world) { super(pos, world); } - - // ---- Shoot type ---- - public EmittersShootType getShootType() { return shootType; } @@ -42,15 +34,9 @@ public void setShootType(EmittersShootType shootType) { this.shootType = shootType; } } - - // ---- Command queue ---- - public ParticleCommandQueue getCommandQueue() { return commandQueue; } - - // ---- Collision ---- - public boolean getEnableCollision() { return enableCollision; } @@ -67,10 +53,7 @@ public void setCollisionRadius(double collisionRadius) { this.collisionRadius = collisionRadius; } - /** - * Fire an event to all registered handlers matching the target event ID. - */ - public void fireEvent(ParticleEvent event) { + public void fireEvent(ParticleEvent event) { if (event == null) return; String eventId = event.getEventID(); for (SortedMap map : getHandlerList().values()) { @@ -82,9 +65,6 @@ public void fireEvent(ParticleEvent event) { } } } - - // ---- Encode/Decode ---- - public static final class Companion { private Companion() { } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ControllableParticleData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ControllableParticleData.java similarity index 92% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ControllableParticleData.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ControllableParticleData.java index 28be688..1bbc079 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ControllableParticleData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ControllableParticleData.java @@ -10,16 +10,7 @@ import java.util.UUID; -/** - * Mutable particle data that commands operate on. - *

- * Fields are aligned with the original Fabric {@code ControllableParticleData}: - * velocity, uuid, age/maxAge, size, alpha, color, speed, speedLimit, rotation, - * plus the existing emitter-range fields (minCount/maxCount/minAge/maxAge/minSize/maxSize/minSpeed/maxSpeed). - */ public class ControllableParticleData implements SerializableData { - - // ---- Emitter-range fields (existing) ---- private int color; private int minCount; private int maxCount; @@ -29,8 +20,6 @@ public class ControllableParticleData implements SerializableData { private double maxSize; private double minSpeed; private double maxSpeed; - - // ---- Per-particle runtime fields (aligned with Fabric original) ---- private UUID uuid = UUID.randomUUID(); private Vec3 velocity = Vec3.ZERO; private Vec3 position = Vec3.ZERO; @@ -47,9 +36,6 @@ public class ControllableParticleData implements SerializableData { private boolean faceToCamera = true; private int light = 15; private float visibleRange = 128.0f; - - // ---- Emitter-range getters/setters ---- - public int getColor() { return color; } public void setColor(int color) { this.color = color; } public int getMinCount() { return minCount; } @@ -68,9 +54,6 @@ public class ControllableParticleData implements SerializableData { public void setMinSpeed(double minSpeed) { this.minSpeed = minSpeed; } public double getMaxSpeed() { return maxSpeed; } public void setMaxSpeed(double maxSpeed) { this.maxSpeed = maxSpeed; } - - // ---- Per-particle runtime getters/setters ---- - public UUID getUuid() { return uuid; } public void setUuid(UUID uuid) { this.uuid = uuid; } @@ -118,9 +101,6 @@ public class ControllableParticleData implements SerializableData { public float getVisibleRange() { return visibleRange; } public void setVisibleRange(float visibleRange) { this.visibleRange = visibleRange; } - - // ---- Clone ---- - @Override public ParticleDisplayer createDisplayer() { return null; // Client-side only; server port returns null @@ -156,9 +136,6 @@ public ControllableParticleData clone() { copy.visibleRange = this.visibleRange; return copy; } - - // ---- Serialization ---- - public void writeToBuf(FriendlyByteBuf buf) { buf.writeInt(color); buf.writeInt(minCount); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugParticleEmitters.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugParticleEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugParticleEmitters.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugRailgunEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugRailgunEmitters.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugRailgunEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugRailgunEmitters.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DisplayableEmitterData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DisplayableEmitterData.java similarity index 69% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DisplayableEmitterData.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DisplayableEmitterData.java index 0f6b32b..c78c437 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DisplayableEmitterData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DisplayableEmitterData.java @@ -5,13 +5,6 @@ import com.reiasu.reiparticlesapi.network.particle.data.SerializableData; import com.reiasu.reiparticlesapi.particles.ParticleDisplayer; -/** - * A {@link SerializableData} implementation for emitter display data. - *

- * All methods currently throw {@link UnsupportedOperationException} matching - * the original Fabric source which also had "Not yet implemented" stubs. - * This class exists as a placeholder type for emitter data factories. - */ public final class DisplayableEmitterData implements SerializableData { @Override diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/EmitterRegistry.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/EmitterRegistry.java similarity index 73% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/EmitterRegistry.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/EmitterRegistry.java index dacfa14..1fde4d8 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/EmitterRegistry.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/EmitterRegistry.java @@ -12,13 +12,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; -/** - * Registry mapping {@link ResourceLocation} keys to integer IDs and decoders - * for {@link ParticleEmitters}. Both client and server must register in the - * same order so that the auto-assigned integer IDs match. - *

- * Network packets transmit VarInt IDs instead of full class-name strings. - */ public final class EmitterRegistry { public static final EmitterRegistry INSTANCE = new EmitterRegistry(); @@ -29,14 +22,7 @@ public final class EmitterRegistry { private EmitterRegistry() { } - /** - * Register an emitter type. Must be called in identical order on client and server. - * - * @param key unique {@link ResourceLocation} for this emitter type - * @param decoder function that reads a {@link ParticleEmitters} from a buffer - * @return the assigned integer ID - */ - public synchronized int register(ResourceLocation key, Function decoder) { + public synchronized int register(ResourceLocation key, Function decoder) { if (key == null || decoder == null) { throw new IllegalArgumentException("key and decoder must not be null"); } diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleDataFactory.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleDataFactory.java new file mode 100644 index 0000000..4fa746a --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleDataFactory.java @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.network.particle.emitters; + +@FunctionalInterface +public interface ParticleDataFactory { + + ControllableParticleData create(); +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java similarity index 81% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java index 69eb368..df08f3c 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java @@ -16,29 +16,6 @@ import java.util.List; import java.util.UUID; -/** - * Base class for all particle emitters in the ReiParticles system. - *

- * Subclasses define custom particle effects by overriding {@link #emitTick()} - * (called each server/client tick while alive) and optionally - * {@link #writePayload(FriendlyByteBuf)} / {@link #readPayload(FriendlyByteBuf)} - * for network synchronization of custom parameters. - *

- * Every emitter subclass registered via {@code @ReiAutoRegister} must declare: - *

{@code
- * public static final ResourceLocation CODEC_ID =
- *         ResourceLocation.fromNamespaceAndPath("mymod", "my_emitter");
- *
- * public static MyEmitter decode(FriendlyByteBuf buf) {
- *     MyEmitter e = new MyEmitter();
- *     e.decodeFromBuffer(buf);
- *     return e;
- * }
- * }
- * - * @see ParticleEmittersManager#spawnEmitters(Object, ServerLevel, double, double, double) - * @see AutoParticleEmitters - */ public abstract class ParticleEmitters implements ServerController { private ResourceLocation emittersID; private UUID uuid = UUID.randomUUID(); @@ -88,11 +65,7 @@ public void setTick(int tick) { this.tick = Math.max(0, tick); } - /** - * Binds this emitter to a world and position. Called automatically by - * {@link ParticleEmittersManager#spawnEmitters}. - */ - public ParticleEmitters bind(Level level, double x, double y, double z) { + public ParticleEmitters bind(Level level, double x, double y, double z) { this.level = level; this.position = new Vec3(x, y, z); return this; @@ -175,11 +148,7 @@ public int getThrottleInterval() { return throttleInterval; } - /** - * Set the tick interval for emission when players are beyond half of visibleRange. - * 1 = every tick (default), 2 = every other tick, etc. - */ - public void setThrottleInterval(int interval) { + public void setThrottleInterval(int interval) { this.throttleInterval = Math.max(1, interval); } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManager.java similarity index 79% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManager.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManager.java index 12b19cb..6b3f412 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManager.java @@ -26,29 +26,6 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; -/** - * Central manager for server-side and client-side particle emitters. - *

- * Threading model: All server-side mutation ({@link #spawnEmitters}, - * {@link #tickAll()}, {@link #removeEmitters}) happens on the main server thread. - * {@code EMITTERS} is guarded by {@code synchronized} for safety, but concurrent - * containers ({@code VISIBLE}, {@code CLIENT_EMITTERS}) are used only because they - * may be read from packet-handler threads. Do not call mutation methods off the - * server thread. - *

- * Server side: emitters are added via {@link #spawnEmitters}, ticked each server tick - * by {@link #tickAll()}, and automatically synchronized to nearby players with - * distance-based LOD throttling and player-sharding. - *

- * Client side: emitters received from the server are stored and ticked via - * {@link #tickClient()}. - *

- * Example — spawning an emitter on the server: - *

{@code
- * MyEmitter emitter = new MyEmitter(params);
- * ParticleEmittersManager.spawnEmitters(emitter, serverLevel, x, y, z);
- * }
- */ public final class ParticleEmittersManager { private static final List EMITTERS = new ArrayList<>(); private static final Map> VISIBLE = new ConcurrentHashMap<>(); @@ -59,7 +36,6 @@ public final class ParticleEmittersManager { private static long visibilityTick = 0; private static final int PLAYER_SHARD_COUNT = 4; - // ---- Per-tick statistics (reset each tick, snapshot for debug) ---- private static int statSynced; private static int statSkippedLod; private static int statSkippedShard; @@ -78,13 +54,6 @@ public static void registerBuiltinCodecs() { registerCodec(DebugRailgunEmitters.CODEC_ID, DebugRailgunEmitters::decode); } - /** - * Registers a codec (decoder) for a particle emitter type. - * - * @param id the {@link ResourceLocation} identifying the emitter type - * @param decoder factory that creates an emitter instance from a network buffer - * @return the assigned integer registry ID, or {@code -1} on failure - */ public static int registerCodec(ResourceLocation id, Function decoder) { if (id == null || decoder == null) { return -1; @@ -103,21 +72,11 @@ public static void spawnEmitters(Object emitter) { spawnEmitters(emitter, null, 0.0, 0.0, 0.0); } - /** - * Spawns a particle emitter on the server. The emitter will be bound to the - * given level and position, ticked automatically, and synced to nearby players. - * - * @param emitter the emitter instance (must extend {@link ParticleEmitters}) - * @param level the server level to bind to - * @param x spawn X coordinate - * @param y spawn Y coordinate - * @param z spawn Z coordinate - */ public static void spawnEmitters(Object emitter, ServerLevel level, double x, double y, double z) { if (!(emitter instanceof ParticleEmitters particleEmitters)) { return; } - // Global emitter budget from APIConfig + // TODO: log a warning when hitting the limit? int limit = APIConfig.INSTANCE.getParticleCountLimit(); synchronized (EMITTERS) { if (EMITTERS.size() >= limit) { @@ -153,17 +112,10 @@ public static void createOrChangeClient(ParticleEmitters emitters, Level viewWor } } - /** - * Returns the last tick's statistics: [synced, skippedLod, skippedShard, throttled]. - */ public static int[] getLastTickStats() { return lastTickStats.clone(); } - /** - * Returns a human-readable debug summary of the emitter system state. - * Includes active emitter count, viewer counts, and last tick statistics. - */ public static String getDebugInfo() { int serverCount; synchronized (EMITTERS) { @@ -212,7 +164,7 @@ private static void updateClientVisible(ParticleEmitters emitters, long tick) { List players = level.players(); for (int i = 0; i < players.size(); i++) { - // Shard players across ticks to reduce per-tick cost from E*P to E*(P/N) + // shard players across ticks if (i % PLAYER_SHARD_COUNT != (int)(tick % PLAYER_SHARD_COUNT)) { statSkippedShard++; continue; @@ -233,7 +185,7 @@ private static void updateClientVisible(ParticleEmitters emitters, long tick) { } if (shouldView) { - // Distance-based LOD: closer players get more frequent updates + // LOD: skip updates for far players double dist = player.position().distanceTo(emitters.position()); double range = emitters.getVisibleRange(); int lodInterval = computeLodInterval(dist, range); @@ -246,15 +198,13 @@ private static void updateClientVisible(ParticleEmitters emitters, long tick) { } } - /** - * Distance-based LOD: near=every tick, mid=every 3, far=every 6, very far=every 12. - */ - private static int computeLodInterval(double distance, double visibleRange) { - double ratio = distance / Math.max(1.0, visibleRange); - if (ratio < 0.25) return 1; // near: every tick - if (ratio < 0.50) return 3; // mid: every 3 ticks - if (ratio < 0.75) return 6; // far: every 6 ticks - return 12; // very far: every 12 ticks + // FIXME: these thresholds are hardcoded, should be configurable + private static int computeLodInterval(double dist, double range) { + double r = dist / Math.max(1.0, range); + if (r < 0.25) return 1; + if (r < 0.50) return 3; + if (r < 0.75) return 6; + return 12; } private static boolean canViewEmitter(ParticleEmitters emitters, ServerPlayer player) { @@ -344,7 +294,6 @@ private static void pruneDisconnectedPlayers() { VISIBLE.clear(); return; } - // Collect the server instance once — O(1) per prune instead of O(E×P). net.minecraft.server.MinecraftServer server = null; synchronized (EMITTERS) { for (ParticleEmitters emitter : EMITTERS) { @@ -362,7 +311,6 @@ private static void pruneDisconnectedPlayers() { srv.getPlayerList().getPlayer(entry.getKey()) == null); } - /** Ticks all client-side emitters. Call once per client tick. */ public static void tickClient() { CLIENT_EMITTERS.entrySet().removeIf(entry -> { ParticleEmitters emitters = entry.getValue(); @@ -381,7 +329,6 @@ public static int activeCount() { } } - /** Cancels and removes all emitters (both server and client). */ public static void clear() { synchronized (EMITTERS) { for (ParticleEmitters emitters : EMITTERS) { @@ -396,14 +343,12 @@ public static void clear() { CLIENT_EMITTERS.clear(); } - /** Returns a snapshot of all active server-side emitters (unmodifiable). */ public static List getEmitters() { synchronized (EMITTERS) { return Collections.unmodifiableList(new ArrayList<>(EMITTERS)); } } - /** Returns an unmodifiable view of all active client-side emitters keyed by UUID. */ public static Map getClientEmitters() { return Collections.unmodifiableMap(CLIENT_EMITTERS); } diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/PhysicConstant.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/PhysicConstant.java new file mode 100644 index 0000000..6aa6cd8 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/PhysicConstant.java @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.network.particle.emitters; + +public final class PhysicConstant { + + public static final double EARTH_GRAVITY = 0.05; + + + public static final double SEA_AIR_DENSITY = 1.225; + + + public static final double DRAG_COEFFICIENT = 0.01; + + + public static final double CROSS_SECTIONAL_AREA = 0.01; +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/SimpleRandomParticleData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/SimpleRandomParticleData.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/SimpleRandomParticleData.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/SimpleRandomParticleData.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/OrbitMode.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/OrbitMode.java similarity index 83% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/OrbitMode.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/OrbitMode.java index 8e8ec99..a2f3a42 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/OrbitMode.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/OrbitMode.java @@ -2,9 +2,6 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.command; -/** - * Defines the orbit calculation mode for {@code ParticleOrbitCommand}. - */ public enum OrbitMode { /** Full Newtonian force-based orbit (gravitational pull + velocity) */ PHYSICAL, diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleAttractionCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleAttractionCommand.java similarity index 94% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleAttractionCommand.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleAttractionCommand.java index 2f46bce..7217d57 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleAttractionCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleAttractionCommand.java @@ -9,10 +9,6 @@ import java.util.function.Supplier; -/** - * Applies an attraction force toward a target position. Particles accelerate - * toward the target with configurable strength, range, and inverse-power falloff. - */ public final class ParticleAttractionCommand implements ParticleCommand { private Supplier target = () -> Vec3.ZERO; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommand.java new file mode 100644 index 0000000..62c150a --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommand.java @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.network.particle.emitters.command; + +import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; +import com.reiasu.reiparticlesapi.particles.ControllableParticle; + +@FunctionalInterface +public interface ParticleCommand { + + void execute(ControllableParticleData data, ControllableParticle particle); +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommandQueue.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommandQueue.java similarity index 62% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommandQueue.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommandQueue.java index c1e1505..bec44b0 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommandQueue.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommandQueue.java @@ -11,19 +11,10 @@ import java.util.Deque; import java.util.function.Consumer; -/** - * An ordered queue of {@link ParticleCommand}s with optional execution predicates. - *

- * Each entry pairs a command with a predicate that decides whether it should fire - * for a given particle on each tick. - */ public final class ParticleCommandQueue { private static final Logger LOGGER = LogUtils.getLogger(); - /** - * Predicate that receives (command, data, particle) and returns true if the command should execute. - */ - @FunctionalInterface + @FunctionalInterface public interface CommandPredicate { boolean test(ParticleCommand command, ControllableParticleData data, ControllableParticle particle); } @@ -36,10 +27,7 @@ public Deque getCommands() { return commands; } - /** - * Iterate all commands, executing those whose predicate passes. - */ - public void applyVelocity(ControllableParticleData data, ControllableParticle particle) { + public void applyVelocity(ControllableParticleData data, ControllableParticle particle) { for (Entry entry : commands) { if (entry.predicate.test(entry.command, data, particle)) { entry.command.execute(data, particle); @@ -47,11 +35,7 @@ public void applyVelocity(ControllableParticleData data, ControllableParticle pa } } - /** - * Apply a mutator to the command at the given index (0-based). - * Out-of-bounds indices are silently ignored. - */ - public ParticleCommandQueue updateWith(int index, Consumer applier) { + public ParticleCommandQueue updateWith(int index, Consumer applier) { int i = 0; for (Entry entry : commands) { if (i == index) { @@ -69,10 +53,7 @@ public ParticleCommandQueue updateWith(int index, Co return this; } - /** - * Apply a mutator to every command that is an instance of the given type. - */ - public ParticleCommandQueue updateWithTypes(Class type, Consumer applier) { + public ParticleCommandQueue updateWithTypes(Class type, Consumer applier) { for (Entry entry : commands) { if (type.isInstance(entry.command)) { applier.accept(type.cast(entry.command)); @@ -81,26 +62,17 @@ public ParticleCommandQueue updateWithTypes(Class return this; } - /** - * Add a command that always executes. - */ - public ParticleCommandQueue add(ParticleCommand command) { + public ParticleCommandQueue add(ParticleCommand command) { commands.add(new Entry(command, ALWAYS_TRUE)); return this; } - /** - * Add a command with a custom execution predicate. - */ - public ParticleCommandQueue add(ParticleCommand command, CommandPredicate predicate) { + public ParticleCommandQueue add(ParticleCommand command, CommandPredicate predicate) { commands.add(new Entry(command, predicate)); return this; } - /** - * Internal storage for a command + its predicate. - */ - public static final class Entry { + public static final class Entry { public final ParticleCommand command; public final CommandPredicate predicate; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDistortionCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDistortionCommand.java similarity index 97% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDistortionCommand.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDistortionCommand.java index bb878cd..a9e38bb 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDistortionCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDistortionCommand.java @@ -8,11 +8,6 @@ import java.util.function.Supplier; -/** - * Applies spatial distortion/deformation effects to particles around a center - * position. Uses procedural noise to push particles along radial, axial, and - * tangential directions with configurable intensity and life-curve attenuation. - */ public final class ParticleDistortionCommand implements ParticleCommand { private Supplier center = () -> Vec3.ZERO; @@ -156,9 +151,6 @@ public void execute(ControllableParticleData data, ControllableParticle particle data.setVelocity(data.getVelocity().add(dv)); } - - // ---- Helper methods ---- - private static Vec3 safeNormalize(Vec3 v) { double len = v.length(); if (len < 1.0E-9) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDragCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDragCommand.java similarity index 93% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDragCommand.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDragCommand.java index 26030ab..cbf0ebf 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDragCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDragCommand.java @@ -7,10 +7,6 @@ import com.reiasu.reiparticlesapi.utils.GraphMathHelper; import net.minecraft.world.phys.Vec3; -/** - * Applies velocity damping (drag) to particles. Combines exponential damping - * with optional linear drag and a minimum speed cutoff. - */ public final class ParticleDragCommand implements ParticleCommand { private double damping = 0.15; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleFlowFieldCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleFlowFieldCommand.java similarity index 93% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleFlowFieldCommand.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleFlowFieldCommand.java index d685a80..b3a24f0 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleFlowFieldCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleFlowFieldCommand.java @@ -6,11 +6,6 @@ import com.reiasu.reiparticlesapi.particles.ControllableParticle; import net.minecraft.world.phys.Vec3; -/** - * Drives particles along a procedural 3D flow/vector field. - * The field is computed from sine/cosine functions of position and time, - * creating an organic turbulent motion pattern. - */ public final class ParticleFlowFieldCommand implements ParticleCommand { private double amplitude = 0.15; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleGravityCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleGravityCommand.java similarity index 92% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleGravityCommand.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleGravityCommand.java index 0b4cba7..2451f53 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleGravityCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleGravityCommand.java @@ -6,9 +6,6 @@ import com.reiasu.reiparticlesapi.particles.ControllableParticle; import net.minecraft.world.phys.Vec3; -/** - * Applies downward gravity to a particle's velocity. - */ public final class ParticleGravityCommand implements ParticleCommand { private final double gravity; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleNoiseCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleNoiseCommand.java similarity index 95% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleNoiseCommand.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleNoiseCommand.java index 909dc87..4a2e5c5 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleNoiseCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleNoiseCommand.java @@ -6,11 +6,6 @@ import com.reiasu.reiparticlesapi.particles.ControllableParticle; import net.minecraft.world.phys.Vec3; -/** - * Adds procedural noise-based displacement to particle movement. - * Uses a built-in value noise function (no external library) to create - * organic, non-repeating motion patterns. - */ public final class ParticleNoiseCommand implements ParticleCommand { private double strength = 0.03; @@ -87,9 +82,6 @@ public void execute(ControllableParticleData data, ControllableParticle particle data.setVelocity(v); } - - // ---- Value noise implementation (matches original Fabric code) ---- - private static double fade(double t) { return t * t * t * (t * (t * 6.0 - 15.0) + 10.0); } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleOrbitCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleOrbitCommand.java similarity index 96% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleOrbitCommand.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleOrbitCommand.java index f24b15b..9caf26e 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleOrbitCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleOrbitCommand.java @@ -8,10 +8,6 @@ import java.util.function.Supplier; -/** - * Makes particles orbit around a center position with configurable radius, - * angular speed, radial correction, and orbit mode (PHYSICAL / SPRING / SNAP). - */ public final class ParticleOrbitCommand implements ParticleCommand { private Supplier center = () -> Vec3.ZERO; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleRotationForceCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleRotationForceCommand.java similarity index 93% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleRotationForceCommand.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleRotationForceCommand.java index 4459244..1239c15 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleRotationForceCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleRotationForceCommand.java @@ -9,11 +9,6 @@ import java.util.function.Supplier; -/** - * Applies a rotational (tangential) force to particles around a center axis. - * The force direction is the cross product of the axis and the radial vector, - * attenuated by inverse-power distance falloff. - */ public final class ParticleRotationForceCommand implements ParticleCommand { private Supplier center = () -> Vec3.ZERO; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleVortexCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleVortexCommand.java similarity index 96% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleVortexCommand.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleVortexCommand.java index 466e234..77679c4 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleVortexCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleVortexCommand.java @@ -9,10 +9,6 @@ import java.util.function.Supplier; -/** - * Creates a vortex/spiral force effect. Combines tangential swirl, radial pull - * inward, and axial lift, all attenuated by inverse-power distance falloff. - */ public final class ParticleVortexCommand implements ParticleCommand { private Supplier center = () -> Vec3.ZERO; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BallWindDirection.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BallWindDirection.java similarity index 95% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BallWindDirection.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BallWindDirection.java index 4ec3888..2790354 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BallWindDirection.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BallWindDirection.java @@ -6,10 +6,6 @@ import com.reiasu.reiparticlesapi.utils.RelativeLocation; import net.minecraft.world.phys.Vec3; -/** - * A wind direction with a spherical area of effect. - * Particles outside the {@code radius} from the emitter + offset are unaffected. - */ public final class BallWindDirection implements WindDirection { public static final String ID = "ball"; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BoxWindDirection.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BoxWindDirection.java similarity index 86% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BoxWindDirection.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BoxWindDirection.java index 8919b16..f334828 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BoxWindDirection.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BoxWindDirection.java @@ -8,19 +8,6 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -/** - * A wind direction with a box-shaped area of effect. - * Particles outside the {@link HitBox} (offset from the emitter position) - * are unaffected. - *

- * When {@code relative} is {@code true}, the wind direction at each particle - * position is the vector from the emitter to the particle, scaled by the - * wind speed expression value. When {@code false}, the fixed direction - * vector is used. - *

- * Forge port note: the wind speed expression is evaluated as a constant double - * (parsed as constant). - */ public final class BoxWindDirection implements WindDirection { public static final String ID = "box"; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/GlobalWindDirection.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/GlobalWindDirection.java similarity index 86% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/GlobalWindDirection.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/GlobalWindDirection.java index 3aa6730..79e8d93 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/GlobalWindDirection.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/GlobalWindDirection.java @@ -5,13 +5,6 @@ import com.reiasu.reiparticlesapi.network.particle.emitters.ParticleEmitters; import net.minecraft.world.phys.Vec3; -/** - * A wind direction that applies uniformly across all space (infinite range). - *

- * When {@code relative} is true, the wind vector is computed as the direction - * from the emitter to the particle, scaled by {@code windSpeedExpress}. - * When false, the fixed {@code direction} vector is returned directly. - */ public final class GlobalWindDirection implements WindDirection { public static final String ID = "global"; @@ -89,7 +82,7 @@ public Vec3 getWind(Vec3 particlePos) { @Override public boolean inRange(Vec3 pos) { - return true; // global — always in range + return true; // global --” always in range } private static double parseSpeed(String express, double length) { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirection.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirection.java new file mode 100644 index 0000000..7436d03 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirection.java @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.network.particle.emitters.environment.wind; + +import com.reiasu.reiparticlesapi.network.particle.emitters.ParticleEmitters; +import net.minecraft.world.phys.Vec3; + +public interface WindDirection { + + Vec3 getDirection(); + + void setDirection(Vec3 direction); + + boolean getRelative(); + + void setRelative(boolean relative); + + String getWindSpeedExpress(); + + void setWindSpeedExpress(String express); + + WindDirection loadEmitters(ParticleEmitters emitters); + + boolean hasLoadedEmitters(); + + String getID(); + + Vec3 getWind(Vec3 particlePos); + + boolean inRange(Vec3 pos); +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirections.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirections.java similarity index 54% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirections.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirections.java index e8bd5de..35399c7 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirections.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirections.java @@ -9,13 +9,6 @@ import java.util.Map; import java.util.function.Supplier; -/** - * Registry and physics helper for {@link WindDirection} implementations. - *

- * Forge port note: The Fabric version registered StreamCodec per wind type. In the - * Forge port we register factory suppliers instead; actual serialization happens at - * a higher level using FriendlyByteBuf when needed. - */ public final class WindDirections { public static final WindDirections INSTANCE = new WindDirections(); @@ -25,17 +18,11 @@ public final class WindDirections { private WindDirections() { } - /** - * Register a wind direction factory by ID. - */ - public void register(String id, Supplier factory) { + public void register(String id, Supplier factory) { factories.put(id, factory); } - /** - * Look up a factory by ID. Throws if not found. - */ - public Supplier getFactoryFromID(String id) { + public Supplier getFactoryFromID(String id) { Supplier factory = factories.get(id); if (factory == null) { throw new IllegalArgumentException("Unknown WindDirection ID: " + id); @@ -43,21 +30,7 @@ public Supplier getFactoryFromID(String id) { return factory; } - /** - * Compute the acceleration vector caused by wind drag on a particle. - *

- * Uses simplified aerodynamic drag: F = 0.5 * rho * Cd * A * |V_rel|^2 * dir(V_rel) - * scaled by 0.05 for per-tick integration. - * - * @param wind the wind source - * @param pos the particle's world position - * @param airDensity air density (kg/m^3), typically {@link PhysicConstant#SEA_AIR_DENSITY} - * @param dragCoefficient drag coefficient, typically {@link PhysicConstant#DRAG_COEFFICIENT} - * @param crossSectionalArea cross-section area, typically {@link PhysicConstant#CROSS_SECTIONAL_AREA} - * @param v the particle's current velocity - * @return the acceleration vector to add to particle velocity - */ - public Vec3 handleWindForce(WindDirection wind, Vec3 pos, double airDensity, + public Vec3 handleWindForce(WindDirection wind, Vec3 pos, double airDensity, double dragCoefficient, double crossSectionalArea, Vec3 v) { if (!wind.inRange(pos)) { return Vec3.ZERO; @@ -73,18 +46,12 @@ public Vec3 handleWindForce(WindDirection wind, Vec3 pos, double airDensity, return Vec3.ZERO; } - /** - * Overload that defaults velocity to zero. - */ - public Vec3 handleWindForce(WindDirection wind, Vec3 pos, double airDensity, + public Vec3 handleWindForce(WindDirection wind, Vec3 pos, double airDensity, double dragCoefficient, double crossSectionalArea) { return handleWindForce(wind, pos, airDensity, dragCoefficient, crossSectionalArea, Vec3.ZERO); } - /** - * Called during mod init to register built-in wind types. - */ - public void init() { + public void init() { register(GlobalWindDirection.ID, () -> new GlobalWindDirection(Vec3.ZERO)); register(BallWindDirection.ID, () -> new BallWindDirection(Vec3.ZERO, 10.0, new com.reiasu.reiparticlesapi.utils.RelativeLocation())); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleCollideEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleCollideEvent.java similarity index 94% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleCollideEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleCollideEvent.java index 19d3881..2028129 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleCollideEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleCollideEvent.java @@ -6,9 +6,6 @@ import com.reiasu.reiparticlesapi.particles.ControllableParticle; import net.minecraft.world.phys.HitResult; -/** - * Fired when a particle collides with any block or entity (general ray-cast hit). - */ public final class ParticleCollideEvent implements ParticleEvent { public static final String EVENT_ID = "ParticleColliderEvent"; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEvent.java new file mode 100644 index 0000000..df1146d --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEvent.java @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.network.particle.emitters.event; + +import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; +import com.reiasu.reiparticlesapi.particles.ControllableParticle; + +public interface ParticleEvent { + + String getEventID(); + + ControllableParticle getParticle(); + + void setParticle(ControllableParticle particle); + + ControllableParticleData getParticleData(); + + void setParticleData(ControllableParticleData data); + + boolean getCanceled(); + + void setCanceled(boolean canceled); +} diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandler.java new file mode 100644 index 0000000..aaeead1 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandler.java @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.network.particle.emitters.event; + +public interface ParticleEventHandler extends Comparable { + + void handle(ParticleEvent event); + + String getTargetEventID(); + + String getHandlerID(); + + int getPriority(); + + @Override + default int compareTo(ParticleEventHandler other) { + return this.getPriority() - other.getPriority(); + } +} diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandlerManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandlerManager.java new file mode 100644 index 0000000..61f142b --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandlerManager.java @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.network.particle.emitters.event; + +import java.util.HashMap; +import java.util.Map; + +public final class ParticleEventHandlerManager { + + public static final ParticleEventHandlerManager INSTANCE = new ParticleEventHandlerManager(); + + private final Map registerHandlers = new HashMap<>(); + + private ParticleEventHandlerManager() { + } + + public ParticleEventHandler getHandlerById(String id) { + return registerHandlers.get(id); + } + + public void register(ParticleEventHandler handler) { + registerHandlers.put(handler.getHandlerID(), handler); + } + + public boolean hasRegister(String id) { + return registerHandlers.containsKey(id); + } + + public void init() { + // Fabric version used ReiAPIScanner for auto-registration. + // Forge port: register handlers explicitly or use Forge event bus. + } +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleHitEntityEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleHitEntityEvent.java similarity index 95% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleHitEntityEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleHitEntityEvent.java index c7b03d9..4aa69d8 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleHitEntityEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleHitEntityEvent.java @@ -6,9 +6,6 @@ import com.reiasu.reiparticlesapi.particles.ControllableParticle; import net.minecraft.world.entity.Entity; -/** - * Fired when a particle's trajectory intersects with a living entity. - */ public final class ParticleHitEntityEvent implements ParticleEvent { public static final String EVENT_ID = "ParticleHitEntityEvent"; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnGroundEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnGroundEvent.java similarity index 96% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnGroundEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnGroundEvent.java index 113518e..e5ee7d0 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnGroundEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnGroundEvent.java @@ -8,9 +8,6 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -/** - * Fired when a particle hits the ground (block collision from above/below). - */ public final class ParticleOnGroundEvent implements ParticleEvent { public static final String EVENT_ID = "ParticleOnGroundEvent"; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnLiquidEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnLiquidEvent.java similarity index 95% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnLiquidEvent.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnLiquidEvent.java index 1f3e2de..7c9de3b 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnLiquidEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnLiquidEvent.java @@ -6,9 +6,6 @@ import com.reiasu.reiparticlesapi.particles.ControllableParticle; import net.minecraft.core.BlockPos; -/** - * Fired when a particle enters a liquid block (water, lava, etc.). - */ public final class ParticleOnLiquidEvent implements ParticleEvent { public static final String EVENT_ID = "ParticleOnLiquidEvent"; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java similarity index 96% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java index d51e713..1f779dd 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java @@ -21,10 +21,6 @@ import java.util.Random; import java.util.UUID; -/** - * Shield/defend emitter that spawns particles in a spherical shell - * with inward velocity, creating a contracting shield effect. - */ public final class DefendClassParticleEmitters extends ClassParticleEmitters { public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "defend_class"); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java similarity index 97% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java index 1f2e420..bc68803 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java @@ -19,9 +19,6 @@ import java.util.List; import java.util.Map; -/** - * Example emitter that spawns particles on a ball surface with inward velocity. - */ public final class ExampleClassParticleEmitters extends ClassParticleEmitters { public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "example_class"); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java similarity index 96% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java index 726fdc6..3c9d469 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java @@ -21,10 +21,6 @@ import java.util.Map; import java.util.Random; -/** - * Explosion emitter that spawns particles on a ball surface with random outward velocity - * and applies velocity drag each tick via physics. - */ public final class ExplodeClassParticleEmitters extends ClassParticleEmitters { public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "explode_class"); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java similarity index 96% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java index e2d844f..fb5254d 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java @@ -21,10 +21,6 @@ import java.util.Map; import java.util.Random; -/** - * Fire emitter that spawns flame-colored particles with upward velocity - * and slight outward spread, simulating a fire column effect. - */ public final class FireClassParticleEmitters extends ClassParticleEmitters { public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "fire_class"); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java similarity index 95% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java index b6de4c4..1ada2e9 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java @@ -20,10 +20,6 @@ import java.util.Map; import java.util.Random; -/** - * Lightning-bolt particle emitter. Uses {@link Math3DUtil#getLightningEffectPoints} - * to generate branching bolt geometry each tick. - */ public final class LightningClassParticleEmitters extends ClassParticleEmitters { public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "lightning_class"); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java similarity index 96% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java index 08d7884..a1216de 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java @@ -20,13 +20,6 @@ import java.util.Map; import java.util.Random; -/** - * Physics-enabled emitter that spawns particles with full gravity, wind, - * air drag, and collision simulation. The most feature-rich emitter in the API. - *

- * Supports configurable spawn count, spawn shape (ball/box/point), - * initial velocity distribution, and per-particle physics updates. - */ public final class PhysicsParticleEmitters extends ClassParticleEmitters { public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "physics_particle"); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java similarity index 97% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java index b331996..1a0492e 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java @@ -20,10 +20,6 @@ import java.util.Map; import java.util.Random; -/** - * Laser beam emitter that spawns particles along a line from origin to target, - * with optional ring cross-sections for visual depth. - */ public final class PresetLaserEmitters extends ClassParticleEmitters { public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "preset_laser"); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java similarity index 97% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java index 2823782..59e195c 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java @@ -21,10 +21,6 @@ import java.util.Map; import java.util.Random; -/** - * Preset test emitter for development/debug purposes. - * Spawns particles in a simple ring pattern. - */ public final class PresetTestEmitters extends ClassParticleEmitters { public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "preset_test"); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java similarity index 94% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java index 5c33f00..4b0ac00 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java @@ -21,14 +21,6 @@ import java.util.Map; import java.util.Random; -/** - * General-purpose particle emitter with configurable count, offset, - * shoot type, and expression-evaluated position offsets per tick. - *

- * In the original Fabric version, math expressions (evalEmittersXWithT, etc.) - * were used to compute dynamic positions. In this Forge port, these are stored - * as strings for serialization compatibility but evaluated as constants. - */ public final class SimpleParticleEmitters extends ClassParticleEmitters { public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("reiparticlesapi", "simple_particle"); @@ -236,10 +228,7 @@ public void update(ParticleEmitters emitters) { } } - /** - * Evaluate a math expression string with variable {@code t} (tick). - */ - private static double evalExpression(String expr, int tick) { + private static double evalExpression(String expr, int tick) { if (expr == null || expr.isEmpty()) return 0.0; try { return new com.reiasu.reiparticlesapi.utils.math.ExpressionEvaluator(expr) diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/BoxEmittersShootType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/BoxEmittersShootType.java similarity index 81% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/BoxEmittersShootType.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/BoxEmittersShootType.java index fa9db60..e4c31da 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/BoxEmittersShootType.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/BoxEmittersShootType.java @@ -9,15 +9,6 @@ import java.util.List; import java.util.concurrent.ThreadLocalRandom; -/** - * Emitter shoot type that distributes particles randomly within an - * axis-aligned {@link HitBox} volume. - *

- * Each particle's spawn position is a random point inside the box, - * offset from the emitter origin. If the emitter's base direction - * vector is (near-)zero the default direction is randomised; otherwise - * the base direction is passed through unchanged. - */ public final class BoxEmittersShootType implements EmittersShootType { public static final String ID = "box"; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootType.java new file mode 100644 index 0000000..8ed9187 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootType.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.network.particle.emitters.type; + +import net.minecraft.world.phys.Vec3; + +import java.util.List; + +public interface EmittersShootType { + + String getID(); + + List getPositions(Vec3 origin, int tick, int count); + + Vec3 getDefaultDirection(Vec3 enter, int tick, Vec3 pos, Vec3 origin); +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootTypes.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootTypes.java similarity index 60% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootTypes.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootTypes.java index a6d9df0..e07d6c2 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootTypes.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootTypes.java @@ -8,13 +8,6 @@ import java.util.Map; import java.util.function.Supplier; -/** - * Registry and factory for {@link EmittersShootType} implementations. - *

- * Forge port note: The Fabric version registered StreamCodec per type for network serialization. - * In Forge we register factory suppliers instead; actual serialization happens at a higher level - * using FriendlyByteBuf when needed. - */ public final class EmittersShootTypes { public static final EmittersShootTypes INSTANCE = new EmittersShootTypes(); @@ -24,22 +17,13 @@ public final class EmittersShootTypes { private EmittersShootTypes() { } - /** - * Register a shoot type factory by ID. - */ - public void register(String id, Supplier factory) { + public void register(String id, Supplier factory) { factories.put(id, factory); } - /** - * Look up a factory by ID; returns null if not registered. - */ - public Supplier fromID(String id) { + public Supplier fromID(String id) { return factories.get(id); } - - // ---- convenience factory methods ---- - public static EmittersShootType point() { return new PointEmittersShootType(); } @@ -48,10 +32,7 @@ public static EmittersShootType line(Vec3 dir, double step) { return new LineEmittersShootType(dir, step); } - /** - * Creates a box shoot type from a centered HitBox. - */ - public static EmittersShootType box(com.reiasu.reiparticlesapi.barrages.HitBox hitBox) { + public static EmittersShootType box(com.reiasu.reiparticlesapi.barrages.HitBox hitBox) { return new BoxEmittersShootType(hitBox); } @@ -59,10 +40,7 @@ public static EmittersShootType math() { return new MathEmittersShootType(); } - /** - * Called during mod init to wire up built-in factories. - */ - public void init() { + public void init() { register(PointEmittersShootType.ID, PointEmittersShootType::new); register(LineEmittersShootType.ID, () -> new LineEmittersShootType(Vec3.ZERO, 1.0)); register(BoxEmittersShootType.ID, () -> new BoxEmittersShootType( diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/LineEmittersShootType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/LineEmittersShootType.java similarity index 86% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/LineEmittersShootType.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/LineEmittersShootType.java index e240a68..b119f31 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/LineEmittersShootType.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/LineEmittersShootType.java @@ -7,10 +7,6 @@ import java.util.ArrayList; import java.util.List; -/** - * Shoot type that distributes particles along a line defined by a direction vector. - * Each successive particle is offset by {@code step} blocks along the normalized direction. - */ public final class LineEmittersShootType implements EmittersShootType { public static final String ID = "line"; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/MathEmittersShootType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/MathEmittersShootType.java similarity index 82% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/MathEmittersShootType.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/MathEmittersShootType.java index e0e1e3d..a363eda 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/MathEmittersShootType.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/MathEmittersShootType.java @@ -10,16 +10,6 @@ import java.util.ArrayList; import java.util.List; -/** - * Emitter shoot type that evaluates mathematical expressions to - * compute particle spawn positions and directions. - *

- * Position expressions may reference variables: {@code i} (particle index), - * {@code c} (particle count), {@code t} (tick). - *

- * Direction expressions may reference: {@code t} (tick), {@code x/y/z} (particle pos), - * {@code ox/oy/oz} (emitter origin). - */ public final class MathEmittersShootType implements EmittersShootType { public static final String ID = "math"; @@ -56,9 +46,6 @@ public final class MathEmittersShootType implements EmittersShootType { public MathEmittersShootType() { } - - // ---- Getters / Setters ---- - public String getX() { return x; } public void setX(String x) { this.x = x; } @@ -76,13 +63,7 @@ public MathEmittersShootType() { public String getDz() { return dz; } public void setDz(String dz) { this.dz = dz; } - - // ---- Core logic ---- - - /** - * @deprecated No longer needed — evaluators are now created fresh per call. - */ - @Deprecated + @Deprecated public void setup() { // No-op: kept for binary compatibility with existing callers (e.g. CODEC). } @@ -111,9 +92,6 @@ public Vec3 getDefaultDirection(Vec3 enter, int tick, Vec3 pos, Vec3 origin) { double ddz = evalDirection(dz, tick, pos, origin); return enter.add(ddx, ddy, ddz); } - - // ---- Helpers ---- - private static double evalPosition(String expr, int tick, int count, int index) { try { return new ExpressionEvaluator(expr) @@ -136,17 +114,11 @@ private static double evalDirection(String expr, int tick, Vec3 pos, Vec3 origin } } - /** - * Encode this shoot type to a buffer. - */ - public void encode(FriendlyByteBuf buf) { + public void encode(FriendlyByteBuf buf) { CODEC.encode(buf, this); } - /** - * Decode a new instance from a buffer. - */ - public static MathEmittersShootType decode(FriendlyByteBuf buf) { + public static MathEmittersShootType decode(FriendlyByteBuf buf) { return (MathEmittersShootType) CODEC.decode(buf); } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/PointEmittersShootType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/PointEmittersShootType.java similarity index 88% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/PointEmittersShootType.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/PointEmittersShootType.java index 0d5da3b..bfabe94 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/PointEmittersShootType.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/PointEmittersShootType.java @@ -8,10 +8,6 @@ import java.util.List; import java.util.Random; -/** - * Shoot type that places all particles at the emitter origin. - * If the base direction is (near-)zero, a random direction is assigned instead. - */ public final class PointEmittersShootType implements EmittersShootType { public static final String ID = "point"; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleGroupStyle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleGroupStyle.java similarity index 82% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleGroupStyle.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleGroupStyle.java index 884a4a9..19d4420 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleGroupStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleGroupStyle.java @@ -27,15 +27,7 @@ import java.util.function.Consumer; import java.util.function.Function; -/** - * Base class for particle style groups. - *

- * Manages a collection of controllable particles arranged at relative locations, - * with support for display, scaling, rotation, teleportation, and server↔client sync. - */ public abstract class ParticleGroupStyle implements ServerController, Controllable { - - // ---- Core identity ---- private UUID uuid; private ResourceLocation registryKey; private boolean canceled; @@ -50,17 +42,10 @@ public abstract class ParticleGroupStyle implements ServerController> particles = new ConcurrentHashMap<>(); private final ConcurrentHashMap, RelativeLocation> particleLocations = new ConcurrentHashMap<>(); private final ConcurrentHashMap particleDefaultLength = new ConcurrentHashMap<>(); - - // ---- Tick actions ---- private final List> preTickActions = new ArrayList<>(); - - // ---- Constructors ---- - public ParticleGroupStyle() { this(96.0, UUID.randomUUID()); } @@ -74,9 +59,6 @@ public ParticleGroupStyle(double visibleRange, UUID uuid) { public void spawnInWorld(ServerLevel world, Vec3 pos) { ParticleStyleManager.spawnStyle(world, pos, this); } - - // ---- Getters/Setters ---- - public UUID getUuid() { return uuid; } @@ -192,33 +174,14 @@ public ConcurrentHashMap, RelativeLocation> getParticleLocations public ConcurrentHashMap getParticleDefaultLength() { return particleDefaultLength; } + public abstract Map getCurrentFrames(); - // ---- Abstract methods that subclasses must implement ---- - - /** - * Return the current frame of particles: mapping from StyleData to relative location. - * Non-sequenced styles use this; sequenced styles return empty and use their own method. - */ - public abstract Map getCurrentFrames(); - - /** - * Called when the style is first displayed (after particles are spawned). - */ - public abstract void onDisplay(); - - // ---- Display lifecycle ---- - - /** - * Called before particles are spawned. Subclasses can modify the locations map. - */ - public void beforeDisplay(Map styles) { + public abstract void onDisplay(); + public void beforeDisplay(Map styles) { // Default no-op } - /** - * Display the style at the given position in the given world. - */ - public void display(Vec3 pos, Level world) { + public void display(Vec3 pos, Level world) { if (displayed) { return; } @@ -234,20 +197,14 @@ public void display(Vec3 pos, Level world) { onDisplay(); } - /** - * Refresh the display: clear existing particles and re-display. - */ - public void flush() { + public void flush() { if (!particles.isEmpty()) { clear(true); } displayParticles(); } - /** - * Spawn particles from getCurrentFrames(). - */ - protected void displayParticles() { + protected void displayParticles() { Map locations = getCurrentFrames(); beforeDisplay(locations); toggleScale(locations); @@ -279,10 +236,7 @@ protected void displayParticles() { } } - /** - * Clear all particles. If valid is true, keep the style alive; otherwise mark invalid. - */ - public void clear(boolean valid) { + public void clear(boolean valid) { for (Controllable c : particles.values()) { c.remove(); } @@ -291,10 +245,7 @@ public void clear(boolean valid) { particleDefaultLength.clear(); } - /** - * Record default scale lengths and apply current scale factor. - */ - protected void toggleScale(Map locations) { + protected void toggleScale(Map locations) { if (particleDefaultLength.isEmpty()) { for (Map.Entry entry : locations.entrySet()) { particleDefaultLength.put(entry.getKey().getUuid(), entry.getValue().length()); @@ -315,10 +266,7 @@ protected void toggleScale(Map locations) } } - /** - * Update displayed particles' scale. - */ - protected void toggleScaleDisplayed() { + protected void toggleScaleDisplayed() { if (scale == 1.0) { return; } @@ -334,19 +282,13 @@ protected void toggleScaleDisplayed() { } } - /** - * Teleport all particles to their current relative positions based on origin. - */ - protected void toggleRelative() { + protected void toggleRelative() { for (Map.Entry, RelativeLocation> entry : particleLocations.entrySet()) { Controllable c = entry.getKey(); RelativeLocation rl = entry.getValue(); c.teleportTo(rl.getX() + pos.x, rl.getY() + pos.y, rl.getZ() + pos.z); } } - - // ---- Transform operations ---- - public void remove() { canceled = true; clear(false); @@ -399,18 +341,12 @@ public void addPreTickAction(Consumer action) { preTickActions.add(action); } } - - // ---- Packet args ---- - public Map> writePacketArgs() { return new HashMap<>(); } public void readPacketArgs(Map> args) { } - - // ---- Change with callback ---- - public void change(Consumer invoker, Map> args) { if (invoker != null) { invoker.accept(this); @@ -418,9 +354,6 @@ public void change(Consumer invoker, Map> args) { readPacketArgs(args); @@ -468,14 +401,7 @@ public void tick() { } displayedTime++; } - - // ---- Inner class: StyleData ---- - - /** - * Holds the data needed to create a single particle in a style: - * the displayer builder, particle handler, and controller handler. - */ - public static class StyleData { + public static class StyleData { private final UUID uuid; private final Function displayerBuilder; private Consumer particleHandler; @@ -504,18 +430,12 @@ public Consumer getParticleControllerHandler() { return particleControllerHandler; } - /** - * Set a handler that configures the particle after creation. - */ - public StyleData withParticleHandler(Consumer handler) { + public StyleData withParticleHandler(Consumer handler) { this.particleHandler = handler; return this; } - /** - * Set a handler that configures the particle controller after creation. - */ - public StyleData withParticleControllerHandler(Consumer handler) { + public StyleData withParticleControllerHandler(Consumer handler) { this.particleControllerHandler = handler; return this; } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleShapeStyle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleShapeStyle.java similarity index 95% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleShapeStyle.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleShapeStyle.java index 31568fd..894b9f8 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleShapeStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleShapeStyle.java @@ -17,10 +17,6 @@ import java.util.function.Consumer; import java.util.function.Function; -/** - * A style that builds its particle layout from {@link PointsBuilder} shapes. - * Supports scale helpers and display/before-display callbacks. - */ public class ParticleShapeStyle extends ParticleGroupStyle { private ScaleHelper scaleHelper; @@ -38,18 +34,12 @@ public ParticleShapeStyle(UUID uuid) { public ParticleShapeStyle() { this(UUID.randomUUID()); } - - // ---- Getters / Setters ---- - public ScaleHelper getScaleHelper() { return scaleHelper; } public void setScaleHelper(ScaleHelper scaleHelper) { this.scaleHelper = scaleHelper; } public int getSpawnAge() { return spawnAge; } public void setSpawnAge(int spawnAge) { this.spawnAge = spawnAge; } public boolean getScalePreTick() { return scalePreTick; } public boolean getScaleReversed() { return scaleReversed; } - - // ---- Builder methods ---- - public ParticleShapeStyle appendBuilder(PointsBuilder pointsBuilder, Function dataBuilder) { this.pointBuilders.put(pointsBuilder, dataBuilder); @@ -99,9 +89,6 @@ public ParticleShapeStyle toggleBeforeDisplay( this.beforeDisplayInvokes.add(toggleMethod); return this; } - - // ---- Overrides ---- - @Override public void beforeDisplay(Map styles) { for (BiConsumer> invoke : beforeDisplayInvokes) { @@ -139,9 +126,6 @@ public void onDisplay() { } }); } - - // ---- Fast style data factory methods ---- - public StyleData fastStyleData(Vec3 color, Function displayer) { return new StyleData(displayer).withParticleHandler(p -> { p.colorOfRGB((int) color.x, (int) color.y, (int) color.z); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleManager.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleManager.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleManager.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleProvider.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleProvider.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleProvider.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleProvider.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleShapeStyle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleShapeStyle.java similarity index 95% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleShapeStyle.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleShapeStyle.java index a831866..32f1b4c 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleShapeStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleShapeStyle.java @@ -19,11 +19,6 @@ import java.util.function.Function; import java.util.function.Predicate; -/** - * A sequenced style that builds its particle layout from {@link PointsBuilder} shapes. - * Combines the shape-building approach of {@link ParticleShapeStyle} with the - * sequential display approach of {@link SequencedParticleStyle}. - */ public final class SequencedParticleShapeStyle extends SequencedParticleStyle { private ScaleHelper scaleHelper; @@ -44,9 +39,6 @@ public SequencedParticleShapeStyle(UUID uuid) { public SequencedParticleShapeStyle() { this(UUID.randomUUID()); } - - // ---- Getters / Setters ---- - public ScaleHelper getScaleHelper() { return scaleHelper; } public void setScaleHelper(ScaleHelper scaleHelper) { this.scaleHelper = scaleHelper; } public int getAnimationIndex() { return animationIndex; } @@ -54,9 +46,6 @@ public SequencedParticleShapeStyle() { public void setSpawnAge(int spawnAge) { this.spawnAge = spawnAge; } public boolean getScalePreTick() { return scalePreTick; } public boolean getScaleReversed() { return scaleReversed; } - - // ---- Builder methods ---- - public SequencedParticleShapeStyle appendBuilder(PointsBuilder pointsBuilder, Function dataBuilder) { this.pointBuilders.put(pointsBuilder, dataBuilder); @@ -111,9 +100,6 @@ public SequencedParticleShapeStyle toggleBeforeDisplay( this.beforeDisplayInvokes.add(toggleMethod); return this; } - - // ---- Overrides ---- - public void beforeDisplay(SortedMap styles) { for (BiConsumer> invoke : beforeDisplayInvokes) { invoke.accept(this, styles); @@ -185,9 +171,6 @@ public Map> writePacketArgsSequenced() { public void readPacketArgsSequenced(Map> args) { // No additional args by default } - - // ---- Fast style data factory methods ---- - public SortedStyleData fastStyleData(int order, Vec3 color, Function displayer) { SortedStyleData data = new SortedStyleData(displayer, order); data.withParticleHandler(p -> { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleStyle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleStyle.java similarity index 94% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleStyle.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleStyle.java index a12eeb8..d7a0341 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleStyle.java @@ -20,10 +20,6 @@ import java.util.function.Consumer; import java.util.function.Function; -/** - * A particle style where particles are displayed sequentially (one-by-one) - * and can be toggled on/off by index. Supports ordered particle display. - */ public abstract class SequencedParticleStyle extends ParticleGroupStyle { public static final int CREATE_PARTICLE = 1; @@ -41,16 +37,10 @@ public SequencedParticleStyle(double visibleRange, UUID uuid) { public SequencedParticleStyle() { this(32.0, UUID.randomUUID()); } - - // ---- Abstract methods ---- - public abstract int getParticlesCount(); public abstract SortedMap getCurrentFramesSequenced(); public abstract Map> writePacketArgsSequenced(); public abstract void readPacketArgsSequenced(Map> args); - - // ---- Getters / Setters ---- - public long[] getDisplayedStatus() { if (displayedStatus == null) { displayedStatus = new long[(getParticlesCount() + 63) / 64]; @@ -69,9 +59,6 @@ public void setDisplayedParticleCount(int count) { } public int getParticleLinkageDisplayCurrentIndex() { return particleLinkageDisplayCurrentIndex; } - - // ---- Status management ---- - public boolean getStatus(int index) { if (index < 0 || index >= getParticlesCount()) return false; int word = index / 64; @@ -95,9 +82,6 @@ public void clearStatus() { displayedParticleCount = 0; particleLinkageDisplayCurrentIndex = 0; } - - // ---- Sequenced add/remove ---- - public void addSingle() { if (getClient()) { if (particleLinkageDisplayCurrentIndex >= getParticlesCount()) return; @@ -170,9 +154,6 @@ public void removeMultiple(int count) { Map> args = buildChangeMultipleStatusArgs(indices, false); change(g -> {}, args); } - - // ---- Toggle from status ---- - protected void toggleFromStatus(int index, boolean status) { if (index < 0 || index >= sequencedParticles.size()) return; Map.Entry entry = sequencedParticles.get(index); @@ -219,9 +200,6 @@ private void createWithIndex(SortedStyleData data, RelativeLocation rl) { getParticles().put(particleUUID, controllable); getParticleLocations().put(controllable, rl); } - - // ---- Packet args helpers ---- - private Map> buildChangeSingleStatusArgs(int index, boolean status) { Map> args = new HashMap<>(); args.put("seq_index", ParticleControllerDataBuffers.INSTANCE.intValue(index)); @@ -237,9 +215,6 @@ private Map> buildChangeMultipleStatusAr args.put("seq_count", ParticleControllerDataBuffers.INSTANCE.intValue(displayedParticleCount)); return args; } - - // ---- Overrides ---- - @Override public Map getCurrentFrames() { return Collections.emptyMap(); @@ -297,13 +272,7 @@ public void readPacketArgs(Map } readPacketArgsSequenced(args); } - - // ---- Inner classes ---- - - /** - * Style data with an order index for sequenced display. - */ - public static class SortedStyleData extends StyleData implements Comparable { + public static class SortedStyleData extends StyleData implements Comparable { private final int order; public SortedStyleData(Function displayerBuilder, int order) { @@ -319,10 +288,7 @@ public int compareTo(SortedStyleData other) { } } - /** - * Builder for creating {@link SortedStyleData} instances with chained configuration. - */ - public static final class SortedStyleDataBuilder { + public static final class SortedStyleDataBuilder { private Function displayerBuilder = uuid -> ParticleDisplayer.Companion.withSingle(new ControllableEndRodEffect(uuid, false)); private final List> particleHandlers = new ArrayList<>(); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/StyleRegistry.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/StyleRegistry.java similarity index 72% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/StyleRegistry.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/StyleRegistry.java index 149d632..be6a9b5 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/StyleRegistry.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/StyleRegistry.java @@ -10,14 +10,6 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -/** - * Registry mapping {@link ResourceLocation} keys to integer IDs and - * {@link ParticleStyleProvider} instances for {@link ParticleGroupStyle}. - * Both client and server must register in the same order so that the - * auto-assigned integer IDs match. - *

- * Network packets transmit VarInt IDs instead of full class-name strings. - */ public final class StyleRegistry { public static final StyleRegistry INSTANCE = new StyleRegistry(); @@ -28,14 +20,7 @@ public final class StyleRegistry { private StyleRegistry() { } - /** - * Register a style type. Must be called in identical order on client and server. - * - * @param key unique {@link ResourceLocation} for this style type - * @param provider the provider that creates / changes style instances - * @return the assigned integer ID - */ - public synchronized int register(ResourceLocation key, ParticleStyleProvider provider) { + public synchronized int register(ResourceLocation key, ParticleStyleProvider provider) { if (key == null || provider == null) { throw new IllegalArgumentException("key and provider must not be null"); } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/util/ServerParticleUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/util/ServerParticleUtil.java similarity index 75% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/util/ServerParticleUtil.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/util/ServerParticleUtil.java index 6972e04..384c642 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/network/particle/util/ServerParticleUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/util/ServerParticleUtil.java @@ -10,16 +10,8 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.phys.Vec3; -/** - * Utility for spawning vanilla and custom particles on the server side, - * sending them to all players (optionally filtered by range). - */ public final class ServerParticleUtil { - public static final ServerParticleUtil INSTANCE = new ServerParticleUtil(); - - private ServerParticleUtil() {} - - public void spawnSingle(ParticleOptions type, ServerLevel world, Vec3 pos, + public static void spawnSingle(ParticleOptions type, ServerLevel world, Vec3 pos, Vec3 delta, boolean force, double speed, int count) { for (ServerPlayer player : world.players()) { world.sendParticles(player, type, force, pos.x, pos.y, pos.z, @@ -27,7 +19,7 @@ public void spawnSingle(ParticleOptions type, ServerLevel world, Vec3 pos, } } - public void spawnSingle(ParticleOptions type, ServerLevel world, Vec3 pos, + public static void spawnSingle(ParticleOptions type, ServerLevel world, Vec3 pos, Vec3 delta, boolean force, double speed, int count, double range) { for (ServerPlayer player : world.players()) { if (player.position().distanceTo(pos) > range) continue; @@ -36,17 +28,17 @@ public void spawnSingle(ParticleOptions type, ServerLevel world, Vec3 pos, } } - public void spawnSingle(ParticleOptions type, ServerLevel world, + public static void spawnSingle(ParticleOptions type, ServerLevel world, RelativeLocation pos, RelativeLocation velocity, double range) { spawnSingle(type, world, pos.toVector(), velocity.toVector(), range); } - public void spawnSingle(ParticleOptions type, ServerLevel world, + public static void spawnSingle(ParticleOptions type, ServerLevel world, RelativeLocation pos, RelativeLocation velocity) { spawnSingle(type, world, pos.toVector(), velocity.toVector()); } - public void spawnSingle(ParticleOptions type, ServerLevel world, + public static void spawnSingle(ParticleOptions type, ServerLevel world, Vec3 pos, Vec3 velocity, double range) { PacketParticleS2C packet = new PacketParticleS2C(type, pos, velocity); for (ServerPlayer player : world.players()) { @@ -55,7 +47,7 @@ public void spawnSingle(ParticleOptions type, ServerLevel world, } } - public void spawnSingle(ParticleOptions type, ServerLevel world, + public static void spawnSingle(ParticleOptions type, ServerLevel world, Vec3 pos, Vec3 velocity) { PacketParticleS2C packet = new PacketParticleS2C(type, pos, velocity); for (ServerPlayer player : world.players()) { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/Controllable.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/Controllable.java new file mode 100644 index 0000000..2129540 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/Controllable.java @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.particles; + +import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; +import com.reiasu.reiparticlesapi.utils.RelativeLocation; +import net.minecraft.world.phys.Vec3; + +import java.util.Map; +import java.util.UUID; + +public interface Controllable { + + UUID controlUUID(); + + void rotateToPoint(RelativeLocation to); + + void rotateToWithAngle(RelativeLocation to, double radian); + + void rotateAsAxis(double radian); + + void teleportTo(Vec3 pos); + + void teleportTo(double x, double y, double z); + + void remove(); + + T getControlObject(); + + @SuppressWarnings("unchecked") + default S getControlCasted() { + return (S) getControlObject(); + } + + @SuppressWarnings("unchecked") + default S getControlCastedOrNull() { + try { + return (S) getControlObject(); + } catch (Exception e) { + return null; + } + } + default void load(Map> args) { + } + + default Map> toArgs() { + return Map.of(); + } + + default void change(Map> args) { + load(args); + } +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java similarity index 90% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java index 834db89..037ba00 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java @@ -28,25 +28,9 @@ import java.util.UUID; -/** - * Core client-side particle class that can be remotely controlled via a {@link ParticleController}. - *

- * Extends {@link TextureSheetParticle} (Forge 1.20.1) and provides: - *

    - *
  • UUID-based control via {@link ControlParticleManager}
  • - *
  • Custom rotation (pitch/yaw/roll) with interpolation
  • - *
  • Teleportation and physics-aware movement
  • - *
  • Color, alpha, light, size control
  • - *
  • Camera-facing or fixed-orientation rendering
  • - *
  • Double-sided quad rendering (front and back faces)
  • - *
- */ public abstract class ControllableParticle extends TextureSheetParticle { - /** - * Default linear interpolator using {@link GraphMathHelper#lerp(float, Vec3, Vec3)}. - */ - public static final ParticleLerpInterpolator LINEAR_INTERPOLATOR = + public static final ParticleLerpInterpolator LINEAR_INTERPOLATOR = (prev, current, delta) -> GraphMathHelper.lerp(delta, prev, current); private final UUID controlUUID; @@ -92,9 +76,6 @@ public ControllableParticle(ClientLevel world, Vec3 pos, Vec3 velocity, UUID con public ControllableParticle(ClientLevel world, Vec3 pos, Vec3 velocity, UUID controlUUID) { this(world, pos, velocity, controlUUID, true); } - - // ---- Getters / Setters ---- - public UUID getControlUUID() { return controlUUID; } @@ -352,9 +333,6 @@ public boolean getUpdateRotate() { public void setUpdateRotate(boolean updateRotate) { this.updateRotate = updateRotate; } - - // ---- Teleport ---- - public void teleportTo(Vec3 pos) { this.lastPreview = pos; this.update = true; @@ -364,9 +342,6 @@ public void teleportTo(double x, double y, double z) { this.lastPreview = new Vec3(x, y, z); this.update = true; } - - // ---- Rotation ---- - public void rotateParticleTo(RelativeLocation target) { rotateParticleTo(new Vector3f((float) target.getX(), (float) target.getY(), (float) target.getZ())); } @@ -380,9 +355,6 @@ public void rotateParticleTo(Vector3f target) { this.updateRotate = true; this.lastRotate = new Vector3f(angles[0], angles[1], angles[2]); } - - // ---- Color helpers ---- - public void colorOfRGB(int r, int g, int b) { setColor(Math3DUtil.colorOf( Mth.clamp(r, 0, 255), @@ -405,9 +377,6 @@ public void colorOfRGBA(int r, int g, int b, float alpha) { Mth.clamp(b, 0, 255))); this.alpha = Mth.clamp(alpha, 0.0f, 1.0f); } - - // ---- Physics-aware movement ---- - public void moveToWithPhysics(Vec3 pos) { Vec3 rel = pos.subtract(getLoc()); BlockHitResult res = PhysicsUtil.collide(getLoc(), rel, (Level) getClientWorld()); @@ -429,16 +398,10 @@ public void moveToWithPhysics(double x, double y, double z, BlockHitResult colli public void moveToWithPhysics(double x, double y, double z) { moveToWithPhysics(new Vec3(x, y, z)); } - - // ---- Interpolator ---- - public ControllableParticle setInterpolator(ParticleLerpInterpolator newInterpolator) { this.interpolator = newInterpolator; return this; } - - // ---- Tick ---- - @Override public void tick() { if (this.age > this.lifetime) { @@ -480,17 +443,11 @@ public void tick() { this.updateRotate = false; } } - - // ---- Remove ---- - @Override public void remove() { super.remove(); ControlParticleManager.INSTANCE.removeControl(this.controlUUID); } - - // ---- Render ---- - @Override public void render(VertexConsumer vertexConsumer, Camera camera, float tickDelta) { Quaternionf q = new Quaternionf(); @@ -527,10 +484,7 @@ public void render(VertexConsumer vertexConsumer, Camera camera, float tickDelta } } - /** - * Renders a single quad facing the given orientation. - */ - private void renderQuad(VertexConsumer consumer, Quaternionf q, float x, float y, float z, float tickDelta, int light) { + private void renderQuad(VertexConsumer consumer, Quaternionf q, float x, float y, float z, float tickDelta, int light) { float size = getQuadSize(tickDelta); float u0 = getU0(); float u1 = getU1(); @@ -543,10 +497,7 @@ private void renderQuad(VertexConsumer consumer, Quaternionf q, float x, float y addVertex(consumer, q, x, y, z, -1.0f, -1.0f, u0, v1, size, light); } - /** - * Renders a double-sided quad (front + back face) for non-camera-facing particles. - */ - private void renderDoubleSidedQuad(VertexConsumer consumer, Quaternionf q, float x, float y, float z, float tickDelta, int light) { + private void renderDoubleSidedQuad(VertexConsumer consumer, Quaternionf q, float x, float y, float z, float tickDelta, int light) { float size = getQuadSize(tickDelta); float u0 = getU0(); float u1 = getU1(); @@ -566,11 +517,7 @@ private void renderDoubleSidedQuad(VertexConsumer consumer, Quaternionf q, float addVertex(consumer, q, x, y, z, 1.0f, -1.0f, u1, v1, size, light); } - /** - * Emit a single vertex for the particle quad. - * Uses Forge 1.20.1 VertexConsumer API with endVertex(). - */ - private void addVertex(VertexConsumer consumer, Quaternionf q, + private void addVertex(VertexConsumer consumer, Quaternionf q, float dx, float dy, float dz, float vx, float vy, float tu, float tv, @@ -581,16 +528,10 @@ private void addVertex(VertexConsumer consumer, Quaternionf q, .setColor(this.rCol, this.gCol, this.bCol, this.alpha) .setLight(light); } - - // ---- Render type ---- - @Override public ParticleRenderType getRenderType() { return this.textureSheet; } - - // ---- Light color ---- - @Override protected int getLightColor(float partialTick) { if (this.light == -1) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffect.java similarity index 51% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffect.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffect.java index 5ceae1c..b0d66e1 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffect.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffect.java @@ -6,15 +6,6 @@ import java.util.UUID; -/** - * Marker interface for controllable particle effects. - *

- * Extends {@link ParticleOptions} so implementations can be used with - * {@link net.minecraft.client.particle.ParticleProvider} factories. - * The actual serialization is handled by the ReiParticles custom network, - * so {@link ParticleOptions} methods are implemented with defaults in - * each concrete class. - */ public interface ControllableParticleEffect extends ParticleOptions { UUID getControlUUID(); void setControlUUID(UUID uuid); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffectManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffectManager.java similarity index 92% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffectManager.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffectManager.java index 28d1b15..342da32 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffectManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffectManager.java @@ -9,10 +9,6 @@ import java.util.Map; import java.util.UUID; -/** - * Registry and factory for {@link ControllableParticleEffect} instances. - * Each effect type is registered with a prototype that is cloned on demand. - */ public final class ControllableParticleEffectManager { public static final ControllableParticleEffectManager INSTANCE = new ControllableParticleEffectManager(); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleDisplayer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleDisplayer.java similarity index 80% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleDisplayer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleDisplayer.java index 6a91e82..336617a 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleDisplayer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleDisplayer.java @@ -14,24 +14,10 @@ import javax.annotation.Nullable; -/** - * Interface for displaying particles/groups/styles/compositions at a world position. - *

- * Each implementation wraps a specific display mechanism and returns - * a {@link Controllable} handle that can be used for subsequent control operations. - */ public interface ParticleDisplayer { - /** - * Display this displayer at the given location in the given client world. - * - * @return a {@link Controllable} handle, or null if spawning failed - */ - @Nullable + @Nullable Controllable display(Vec3 loc, ClientLevel world); - - // ---- Factory methods ---- - static ParticleDisplayer withSingle(ControllableParticleEffect effect) { return new SingleParticleDisplayer(effect); } @@ -51,9 +37,6 @@ static ParticleDisplayer withDisplayEntity(DisplayEntity entity) { static ParticleDisplayer withComposition(ParticleComposition composition) { return new ParticleCompositionDisplayer(composition); } - - // ---- Companion for backward compat ---- - Companion Companion = new Companion(); class Companion { @@ -77,13 +60,7 @@ public ParticleDisplayer withComposition(ParticleComposition composition) { return ParticleDisplayer.withComposition(composition); } } - - // ---- Inner implementations ---- - - /** - * Displays a single ControllableParticle via its ControllableParticleEffect. - */ - class SingleParticleDisplayer implements ParticleDisplayer { + class SingleParticleDisplayer implements ParticleDisplayer { private final ControllableParticleEffect effect; public SingleParticleDisplayer(ControllableParticleEffect effect) { @@ -104,10 +81,7 @@ public Controllable display(Vec3 loc, ClientLevel world) { } } - /** - * Displays a ControllableParticleGroup. - */ - class ParticleGroupDisplayer implements ParticleDisplayer { + class ParticleGroupDisplayer implements ParticleDisplayer { private final ControllableParticleGroup group; public ParticleGroupDisplayer(ControllableParticleGroup group) { @@ -126,10 +100,7 @@ public Controllable display(Vec3 loc, ClientLevel world) { } } - /** - * Displays a ParticleGroupStyle. - */ - class ParticleStyleDisplayer implements ParticleDisplayer { + class ParticleStyleDisplayer implements ParticleDisplayer { private final ParticleGroupStyle style; public ParticleStyleDisplayer(ParticleGroupStyle style) { @@ -148,10 +119,7 @@ public Controllable display(Vec3 loc, ClientLevel world) { } } - /** - * Displays a DisplayEntity. - */ - class DisplayEntityDisplayer implements ParticleDisplayer { + class DisplayEntityDisplayer implements ParticleDisplayer { private final DisplayEntity entity; public DisplayEntityDisplayer(DisplayEntity entity) { @@ -172,10 +140,7 @@ public Controllable display(Vec3 loc, ClientLevel world) { } } - /** - * Displays a ParticleComposition. - */ - class ParticleCompositionDisplayer implements ParticleDisplayer { + class ParticleCompositionDisplayer implements ParticleDisplayer { private final ParticleComposition composition; public ParticleCompositionDisplayer(ParticleComposition composition) { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleLerpInterpolator.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleLerpInterpolator.java new file mode 100644 index 0000000..de84b10 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleLerpInterpolator.java @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.particles; + +import net.minecraft.world.phys.Vec3; + +public interface ParticleLerpInterpolator { + Vec3 consume(Vec3 prev, Vec3 current, float delta); +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java similarity index 86% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java index e534388..ca1a322 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java @@ -16,12 +16,6 @@ import java.util.UUID; import java.util.function.BiFunction; -/** - * Registry for all ReiParticlesAPI custom particle types. - *

- * NeoForge port: uses {@link DeferredRegister} with custom {@link ParticleType} - * instances that carry {@link ControllableParticleEffect} data (UUID + faceToPlayer). - */ public final class ReiModParticles { public static final ReiModParticles INSTANCE = new ReiModParticles(); @@ -59,10 +53,7 @@ public final class ReiModParticles { private ReiModParticles() {} - /** - * Creates a {@link ParticleType} with MapCodec and StreamCodec for 1.21+. - */ - private static ParticleType createType( + private static ParticleType createType( BiFunction factory) { MapCodec mapCodec = MapCodec.unit(() -> factory.apply(UUID.randomUUID(), false)); StreamCodec streamCodec = new StreamCodec<>() { @@ -90,11 +81,7 @@ public StreamCodec streamCodec() { }; } - /** - * Register the particle types with the NeoForge event bus. - * Call this during mod construction. - */ - public static void register(IEventBus modBus) { + public static void register(IEventBus modBus) { PARTICLES.register(modBus); } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java similarity index 85% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java index a37bc33..3156b17 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java @@ -14,11 +14,7 @@ import net.minecraft.client.renderer.texture.TextureManager; public final class ReiParticleTextureSheet { - /** - * Additive-blend particle render type that produces a glow effect. - * Uses SRC_ALPHA + ONE blending (additive) with depth-write disabled. - */ - public static final ParticleRenderType ADDITION_BLEND_TRANSLUCENT = new ParticleRenderType() { + public static final ParticleRenderType ADDITION_BLEND_TRANSLUCENT = new ParticleRenderType() { @Override public BufferBuilder begin(Tesselator tesselator, TextureManager textureManager) { RenderSystem.depthMask(false); diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlParticleManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlParticleManager.java new file mode 100644 index 0000000..f30ab1b --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlParticleManager.java @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.particles.control; + +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public final class ControlParticleManager { + + public static final ControlParticleManager INSTANCE = new ControlParticleManager(); + + private final ConcurrentHashMap controls = new ConcurrentHashMap<>(); + + private ControlParticleManager() { + } + + public ParticleController getControl(UUID uuid) { + return controls.get(uuid); + } + + public void removeControl(UUID uuid) { + controls.remove(uuid); + } + + public ParticleController createControl(UUID uuid) { + ParticleController controller = new ParticleController(uuid); + controls.put(uuid, controller); + return controller; + } +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlType.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlType.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlType.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/ParticleController.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ParticleController.java similarity index 79% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/ParticleController.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ParticleController.java index 47c8731..b7ce02a 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/ParticleController.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ParticleController.java @@ -14,12 +14,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; -/** - * Controller associated with a single {@link ControllableParticle}. - *

- * Implements {@link Controllable} so it can participate in composition/helper - * systems. Pre-tick actions are stored and replayed every tick. - */ public final class ParticleController implements Controllable { private final UUID uuid; @@ -52,26 +46,17 @@ public void setInitInvoker(Consumer initInvoker) { this.initInvoker = initInvoker; } - /** - * Add an action to run every tick before the particle ticks. - */ - public ParticleController addPreTickAction(Consumer action) { + public ParticleController addPreTickAction(Consumer action) { invokeQueue.add(action); return this; } - /** - * Immediately invoke an action on the particle. - */ - public ParticleController controlAction(Consumer action) { + public ParticleController controlAction(Consumer action) { action.accept(getParticle()); return this; } - /** - * Load the particle reference. Only the first call has effect. - */ - public void loadParticle(ControllableParticle particle) { + public void loadParticle(ControllableParticle particle) { if (this.particle != null) { return; } @@ -81,10 +66,7 @@ public void loadParticle(ControllableParticle particle) { this.particle = particle; } - /** - * Run the init invoker if not already done. - */ - public void particleInit() { + public void particleInit() { if (init) { return; } @@ -95,10 +77,7 @@ public void particleInit() { init = true; } - /** - * Run all pre-tick actions and check for death. - */ - public void doTick() { + public void doTick() { for (Consumer action : invokeQueue) { action.accept(getParticle()); } @@ -118,9 +97,6 @@ public void rotateParticleTo(Vec3 target) { public void rotateParticleTo(Vector3f target) { getParticle().rotateParticleTo(target); } - - // ---- Controllable interface ---- - @Override public UUID controlUUID() { return uuid; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ClientParticleGroupManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ClientParticleGroupManager.java similarity index 84% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ClientParticleGroupManager.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ClientParticleGroupManager.java index c7b7da7..7035864 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ClientParticleGroupManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ClientParticleGroupManager.java @@ -10,14 +10,6 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; -/** - * Client-side manager for {@link ControllableParticleGroup} instances. - *

- * Tracks visible groups, ticks them, and provides factory registration - * for creating groups from server-side packets. - * - * @deprecated Use ParticleGroupStyle instead. - */ @Deprecated public final class ClientParticleGroupManager { public static final ClientParticleGroupManager INSTANCE = new ClientParticleGroupManager(); @@ -58,10 +50,7 @@ public void clearAllVisible() { visibleControls.clear(); } - /** - * Called every client tick. Ticks all visible groups and clears if player is removed. - */ - public void doClientTick() { + public void doClientTick() { LocalPlayer player = Minecraft.getInstance().player; if (player == null) { return; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroup.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroup.java similarity index 87% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroup.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroup.java index 7995981..2ed16bd 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroup.java @@ -21,14 +21,6 @@ import java.util.function.Consumer; import java.util.function.Function; -/** - * Base class for client-side controllable particle groups. - *

- * A group manages a collection of {@link Controllable} objects arranged at relative - * locations around an origin point. Supports scaling, rotation, and tick-based lifecycle. - * - * @deprecated Use {@link ParticleGroupStyle} instead. - */ @Deprecated public abstract class ControllableParticleGroup implements Controllable { @@ -52,9 +44,6 @@ public abstract class ControllableParticleGroup implements Controllable> getParticles() { return particles; } @@ -92,40 +81,19 @@ public ControllableParticleGroup(UUID uuid) { public boolean getDisplayed() { return displayed; } public void setDisplayed(boolean v) { this.displayed = v; } + public abstract Map loadParticleLocations(); - // ---- Abstract methods ---- - - /** - * Define the particle layout: mapping from particle data to relative location. - */ - public abstract Map loadParticleLocations(); + public abstract void onGroupDisplay(); - /** - * Called after display is complete. - */ - public abstract void onGroupDisplay(); - - /** - * Called before particles are spawned. Can modify the locations map. - */ - public void beforeDisplay(Map locations) { + public void beforeDisplay(Map locations) { // Default no-op } - - // ---- Factory helper ---- - - /** - * Create a {@link ParticleRelativeData} for use in {@link #loadParticleLocations()}. - */ - public ParticleRelativeData withEffect( + public ParticleRelativeData withEffect( Function effect, Consumer invoker ) { return new ParticleRelativeData(effect, invoker); } - - // ---- Particle lifecycle ---- - public void clearParticles() { for (Controllable c : particles.values()) { c.remove(); @@ -154,10 +122,7 @@ public void flushRelativeLocations() { } } - /** - * Called every client tick by {@link ClientParticleGroupManager}. - */ - public void tick() { + public void tick() { if (!valid || canceled) { clearParticles(); return; @@ -202,9 +167,6 @@ public void scale(double d) { toggleScaleDisplayed(); } } - - // ---- Rotation ---- - @Override public void rotateToPoint(RelativeLocation to) { if (!displayed) return; @@ -232,9 +194,6 @@ public void rotateAsAxis(double angle) { Math3DUtil.rotateAsAxis(locs, axis, angle); teleportAllToRelative(); } - - // ---- Teleport ---- - @Deprecated public void teleportGroupTo(Vec3 pos) { this.origin = pos; @@ -265,16 +224,10 @@ public ControllableParticleGroup getControlObject() { public UUID controlUUID() { return uuid; } - - // ---- Pre-tick actions ---- - protected ControllableParticleGroup addPreTickAction(Consumer action) { invokeQueue.add(action); return this; } - - // ---- Pre-rotate helpers ---- - public void preRotateTo(Map map, RelativeLocation to) { Math3DUtil.rotatePointsToPoint(new ArrayList<>(map.values()), to, axis); axis = to; @@ -288,9 +241,6 @@ public void preRotateAsAxis(Map map, Rel public void preRotateAsAxis(Map map, double angle) { Math3DUtil.rotateAsAxis(new ArrayList<>(map.values()), axis, angle); } - - // ---- Internal ---- - protected void toggleScaleDisplayed() { if (scale == 1.0) return; for (Map.Entry, RelativeLocation> entry : particlesLocations.entrySet()) { @@ -359,14 +309,7 @@ private void toggleScale(Map locations) } } } - - // ---- Inner class: ParticleRelativeData ---- - - /** - * Data holder for a single particle in the group layout: - * contains the effect factory, particle initializer, and optional controller action. - */ - public static class ParticleRelativeData { + public static class ParticleRelativeData { private final Function effect; private final Consumer invoker; private final UUID uuid; @@ -384,10 +327,7 @@ public ParticleRelativeData(Function effect, Consumer getControllerAction() { return controllerAction; } - /** - * Set an action to be run on the ParticleController after creation. - */ - public ParticleRelativeData withController(Consumer controller) { + public ParticleRelativeData withController(Consumer controller) { this.controllerAction = controller; return this; } diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroupProvider.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroupProvider.java new file mode 100644 index 0000000..a51de68 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroupProvider.java @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.particles.control.group; + +import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; + +import java.util.Map; +import java.util.UUID; + +@Deprecated +public interface ControllableParticleGroupProvider { + + ControllableParticleGroup createGroup(UUID uuid, Map> args); + + void changeGroup(ControllableParticleGroup group, Map> args); +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/SequencedParticleGroup.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/SequencedParticleGroup.java similarity index 92% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/SequencedParticleGroup.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/SequencedParticleGroup.java index 1041c2f..0ebda56 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/SequencedParticleGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/SequencedParticleGroup.java @@ -24,14 +24,6 @@ import java.util.function.Consumer; import java.util.function.Function; -/** - * A particle group that supports sequenced (ordered) display of particles. - *

- * Particles can be added/removed one by one or in batches, with bit-packed - * status arrays tracking which particles are currently displayed. - * - * @deprecated Use ParticleGroupStyle instead. - */ @Deprecated public abstract class SequencedParticleGroup extends ControllableParticleGroup { @@ -44,9 +36,6 @@ public abstract class SequencedParticleGroup extends ControllableParticleGroup { public SequencedParticleGroup(UUID uuid) { super(uuid); } - - // ---- Lazy init for displayedStatus ---- - public long[] getDisplayedStatus() { if (displayedStatus == null) { displayedStatus = new long[Math.max(1, sequencedParticles.size())]; @@ -61,9 +50,6 @@ public long[] getDisplayedStatus() { protected ArrayList> getSequencedParticles() { return sequencedParticles; } - - // ---- Override parent methods to delegate to sequenced versions ---- - @Override public final Map loadParticleLocations() { return Map.of(); @@ -78,13 +64,7 @@ public void beforeDisplay(SortedMap loadParticleLocationsWithIndex(); - - // ---- Display lifecycle ---- - + public abstract SortedMap loadParticleLocationsWithIndex(); @Override public void flush() { if (getCanceled() || !getValid() || !getDisplayed()) { @@ -115,9 +95,6 @@ private void displayParticles() { beforeDisplay(locations); toggleScale(locations); } - - // ---- Factory helper ---- - public SequencedParticleRelativeData withEffect( Function effect, Consumer invoker, @@ -125,9 +102,6 @@ public SequencedParticleRelativeData withEffect( ) { return new SequencedParticleRelativeData(effect, invoker, order); } - - // ---- Status management ---- - public void setSingleStatus(int index, boolean status) { int page = MathDataUtil.getStoragePageLong(index); int bit = MathDataUtil.getStorageWithBitLong(index); @@ -252,9 +226,6 @@ protected final void toggleScaleDisplayed() { } } } - - // ---- Rotation overrides (operate on sequencedParticles) ---- - @Override public void rotateToPoint(RelativeLocation to) { if (!getDisplayed()) return; @@ -282,9 +253,6 @@ public void rotateToWithAngle(RelativeLocation to, double angle) { teleportParticlesToRelative(); setAxis(to.normalize()); } - - // ---- Internal helpers ---- - private List extractLocations() { List result = new ArrayList<>(sequencedParticles.size()); for (Pair pair : sequencedParticles) { @@ -367,13 +335,7 @@ private void toggleScale(SortedMap { @@ -406,10 +368,7 @@ public int hashCode() { } } - /** - * Simple generic pair utility (replaces Kotlin's Pair). - */ - public static class Pair { + public static class Pair { public final A first; public final B second; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableCloudEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableCloudEffect.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableCloudEffect.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableCloudEffect.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEnchantmentEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEnchantmentEffect.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEnchantmentEffect.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEnchantmentEffect.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEndRodEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEndRodEffect.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEndRodEffect.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEndRodEffect.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFallingDustEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFallingDustEffect.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFallingDustEffect.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFallingDustEffect.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFireworkEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFireworkEffect.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFireworkEffect.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFireworkEffect.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFlashEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFlashEffect.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFlashEffect.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFlashEffect.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableSplashEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableSplashEffect.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableSplashEffect.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableSplashEffect.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableCloudParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableCloudParticle.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableCloudParticle.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableCloudParticle.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEnchantmentParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEnchantmentParticle.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEnchantmentParticle.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEnchantmentParticle.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEndRodParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEndRodParticle.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEndRodParticle.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEndRodParticle.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFallingDustParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFallingDustParticle.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFallingDustParticle.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFallingDustParticle.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFireworkParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFireworkParticle.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFireworkParticle.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFireworkParticle.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFlashParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFlashParticle.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFlashParticle.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFlashParticle.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableSplashParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableSplashParticle.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableSplashParticle.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableSplashParticle.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/reflect/ReiAPIScanner.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/reflect/ReiAPIScanner.java similarity index 71% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/reflect/ReiAPIScanner.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/reflect/ReiAPIScanner.java index 10d8194..f237c66 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/reflect/ReiAPIScanner.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/reflect/ReiAPIScanner.java @@ -15,12 +15,6 @@ import java.util.List; import java.util.stream.Collectors; -/** - * Classpath scanner using ClassGraph that discovers annotated classes at runtime. - *

- * Packages to scan must be registered via {@link #registerPackage(Class)} or - * {@link #registerPackage(String)} before calling {@link #scan()}. - */ public final class ReiAPIScanner { public static final ReiAPIScanner INSTANCE = new ReiAPIScanner(); @@ -33,9 +27,6 @@ public final class ReiAPIScanner { private ReiAPIScanner() { } - /** - * Perform the classpath scan. Only runs once; subsequent calls are no-ops. - */ public void scan() { if (loaded) { return; @@ -44,9 +35,7 @@ public void scan() { try { long start = System.currentTimeMillis(); - LOGGER.info("Starting ClassGraph scan..."); - - String[] packages = scanPackages.toArray(new String[0]); + String[] packages = scanPackages.toArray(new String[0]); try (ScanResult scanResult = new ClassGraph() .enableClassInfo() .enableAnnotationInfo() @@ -66,16 +55,13 @@ public void scan() { } long end = System.currentTimeMillis(); - LOGGER.info("ClassGraph scan completed in {}ms", (end - start)); + LOGGER.info("scan took {}ms", (end - start)); } catch (NoClassDefFoundError e) { - LOGGER.warn("ClassGraph not available — falling back to explicit listener registration only. " + LOGGER.warn("ClassGraph not available --” falling back to explicit listener registration only. " + "Use registerListenerInstance() or registerAnnotatedClass() instead.", e); } } - /** - * Return all scanned classes that carry the given annotation. - */ public Collection getWithAnnotation(Class anno) { List out = new ArrayList<>(); for (SimpleClassInfo info : classes) { @@ -86,9 +72,6 @@ public Collection getWithAnnotation(Class return out; } - /** - * Return loaded {@link Class} objects for all scanned classes that carry the given annotation. - */ public Collection> getClassesWithAnnotation(Class anno) { List> out = new ArrayList<>(); for (SimpleClassInfo info : classes) { @@ -103,24 +86,14 @@ public Collection> getClassesWithAnnotation(Class return out; } - /** - * Manually add a scan result (used internally during scan, or for testing). - */ public void inputScanResult(SimpleClassInfo scanResult) { classes.add(scanResult); } - /** - * Mark the scanner as loaded without performing a scan. - * Used by NeoForge/Forge mod-scan bootstrapping that provides class info externally. - */ public void neoLoaded() { loaded = true; } - /** - * Register a package to scan, derived from the given class's package. - */ public int getScannedPackageCount() { return scanPackages.size(); } @@ -130,12 +103,9 @@ public static void registerPackage(Class main) { registerPackage(packageName); } - /** - * Register a package name to include in the ClassGraph scan. - */ public static void registerPackage(String packageName) { INSTANCE.scanPackages.add(packageName); - LOGGER.info("Registered scan package: {}", packageName); + } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/reflect/SimpleClassInfo.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/reflect/SimpleClassInfo.java similarity index 55% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/reflect/SimpleClassInfo.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/reflect/SimpleClassInfo.java index 35923ca..2965280 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/reflect/SimpleClassInfo.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/reflect/SimpleClassInfo.java @@ -5,10 +5,6 @@ import java.lang.annotation.Annotation; import java.util.HashSet; -/** - * Lightweight class metadata holder storing a class name and its annotation names. - * Used by classpath scanning to defer class loading until needed. - */ public final class SimpleClassInfo { private final String type; @@ -27,19 +23,11 @@ public HashSet getAnnotations() { return annotations; } - /** - * Checks whether this class info contains the given annotation type. - */ - public boolean isAnnotationPresent(Class anno) { + public boolean isAnnotationPresent(Class anno) { return annotations.contains(anno.getName()); } - /** - * Loads and returns the actual {@link Class} represented by this info. - * - * @throws ClassNotFoundException if the class cannot be found - */ - public Class toClass() throws ClassNotFoundException { + public Class toClass() throws ClassNotFoundException { return Class.forName(type); } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/renderer/RenderEntity.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/RenderEntity.java similarity index 94% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/renderer/RenderEntity.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/RenderEntity.java index 1ad4002..eb1fa51 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/renderer/RenderEntity.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/RenderEntity.java @@ -12,10 +12,6 @@ import java.util.UUID; -/** - * Base class for custom render entities that are managed server-side - * and rendered client-side with custom shaders/models. - */ public abstract class RenderEntity implements ServerController { private Level world; @@ -46,15 +42,9 @@ public RenderEntity() { public void spawnInWorld(ServerLevel world, Vec3 pos) { ServerRenderEntityManager.INSTANCE.spawn(this); } - - // ---- Abstract methods ---- - public abstract void clientTick(); public abstract void serverTick(); public abstract ResourceLocation getRenderID(); - - // ---- Lifecycle ---- - @Override public void tick() { age++; @@ -135,9 +125,6 @@ public void loadProfileFromEntity(RenderEntity another) { public RenderEntity getValue() { return this; } - - // ---- Getters / Setters ---- - public Level getWorld() { return world; } public void setWorld(Level world) { this.world = world; } public Vec3 getPos() { return pos; } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/renderer/client/ClientRenderEntityManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/client/ClientRenderEntityManager.java similarity index 83% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/renderer/client/ClientRenderEntityManager.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/client/ClientRenderEntityManager.java index 851a9b1..01442e6 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/renderer/client/ClientRenderEntityManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/client/ClientRenderEntityManager.java @@ -10,12 +10,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; -/** - * Client-side manager for {@link RenderEntity} instances received via packets. - *

- * Tracks visible entities, ticks them, and provides codec registration - * for decoding entities from server-side packets. - */ public final class ClientRenderEntityManager { public static final ClientRenderEntityManager INSTANCE = new ClientRenderEntityManager(); @@ -59,10 +53,7 @@ public void clear() { entities.clear(); } - /** - * Called every client tick. Ticks all visible render entities and removes canceled ones. - */ - public void doClientTick() { + public void doClientTick() { entities.entrySet().removeIf(entry -> { RenderEntity entity = entry.getValue(); if (entity.getCanceled()) return true; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/renderer/server/ServerRenderEntityManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/server/ServerRenderEntityManager.java similarity index 96% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/renderer/server/ServerRenderEntityManager.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/server/ServerRenderEntityManager.java index 13bb6b8..3679e37 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/renderer/server/ServerRenderEntityManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/server/ServerRenderEntityManager.java @@ -13,10 +13,6 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; -/** - * Manages all server-side {@link RenderEntity} instances, - * handling visibility, tick updates, and network sync. - */ public final class ServerRenderEntityManager { public static final ServerRenderEntityManager INSTANCE = new ServerRenderEntityManager(); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/scheduler/ReiScheduler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/scheduler/ReiScheduler.java similarity index 93% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/scheduler/ReiScheduler.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/scheduler/ReiScheduler.java index aba332f..ad118e6 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/scheduler/ReiScheduler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/scheduler/ReiScheduler.java @@ -5,10 +5,6 @@ import java.util.concurrent.ConcurrentLinkedQueue; import java.util.function.Predicate; -/** - * Tick-based task scheduler. Supports one-shot, repeating (with interval), - * and repeating-with-max-tick tasks. Thread-safe task queue. - */ public final class ReiScheduler { public static final ReiScheduler INSTANCE = new ReiScheduler(); @@ -62,11 +58,7 @@ public TickRunnable runTaskTimerMaxTick(int preDelay, int maxLoopTick, Runnable return tr; } - /** - * A scheduled tick-driven task with support for one-shot, repeating, - * and repeating-with-limit modes. - */ - public static final class TickRunnable { + public static final class TickRunnable { private final int delay; private final Runnable action; private final boolean repeating; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroup.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroup.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroup.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroup.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroupBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroupBuilder.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroupBuilder.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroupBuilder.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestOption.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestOption.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestOption.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestOption.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/test/TestManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/TestManager.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/test/TestManager.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/test/TestManager.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroup.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroup.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroup.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroup.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroupBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroupBuilder.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroupBuilder.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroupBuilder.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/test/api/TestOption.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestOption.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/test/api/TestOption.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestOption.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/CircularQueue.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/CircularQueue.java similarity index 93% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/CircularQueue.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/CircularQueue.java index 0334aaa..88c0e75 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/CircularQueue.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/CircularQueue.java @@ -5,10 +5,6 @@ import java.util.Iterator; import java.util.NoSuchElementException; -/** - * A fixed-capacity circular queue (ring buffer). - * When full, new elements overwrite the oldest entries. - */ public final class CircularQueue implements Iterable { private final int capacity; private final Object[] data; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ClientCameraUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ClientCameraUtil.java similarity index 70% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ClientCameraUtil.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ClientCameraUtil.java index 66780af..abc5d8a 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ClientCameraUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ClientCameraUtil.java @@ -6,14 +6,6 @@ import java.util.concurrent.ThreadLocalRandom; -/** - * Utility singleton for managing client camera shake effects. - *

- * Stores per-tick shake offsets (position + angle) that a client-side camera - * mixin or event handler can apply. Call {@link #startShakeCamera(int, double)} - * to begin a shake, and {@link #tick()} each client tick to update the offsets. - * The shake amplitude linearly decreases to zero over the specified duration. - */ public final class ClientCameraUtil { public static final ClientCameraUtil INSTANCE = new ClientCameraUtil(); @@ -39,9 +31,6 @@ public final class ClientCameraUtil { private ClientCameraUtil() { } - - // ---- Shake offsets (read by camera mixin) ---- - public float getShakeYawOffset() { return shakeYawOffset; } public void setShakeYawOffset(float v) { shakeYawOffset = v; } @@ -56,9 +45,6 @@ private ClientCameraUtil() { public double getShakeZOffset() { return shakeZOffset; } public void setShakeZOffset(double v) { shakeZOffset = v; } - - // ---- Manual persistent offsets ---- - public float getCurrentYawOffset() { return currentYawOffset; } public void setCurrentYawOffset(float v) { currentYawOffset = v; } @@ -73,9 +59,6 @@ private ClientCameraUtil() { public double getCurrentZOffset() { return currentZOffset; } public void setCurrentZOffset(double v) { currentZOffset = v; } - - // ---- Shake control state ---- - public int getTick() { return tick; } public void setTick(int v) { tick = v; } @@ -84,60 +67,35 @@ private ClientCameraUtil() { public double getAmp() { return amp; } public void setAmp(double v) { amp = v; } - - // ---- Operations ---- - - /** - * Sets the manual position offset from a Vec3. - */ - public void setOffsetPosition(Vec3 offset) { + public void setOffsetPosition(Vec3 offset) { currentXOffset = offset.x; currentYOffset = offset.y; currentZOffset = offset.z; } - /** - * Resets manual position offsets to zero. - */ - public void resetPosOffset() { + public void resetPosOffset() { currentXOffset = 0.0; currentYOffset = 0.0; currentZOffset = 0.0; } - /** - * Resets manual angle offsets to zero. - */ - public void resetAngleOffset() { + public void resetAngleOffset() { currentYawOffset = 0.0f; currentPitchOffset = 0.0f; } - /** - * Resets all manual offsets (position + angle) to zero. - */ - public void resetOffset() { + public void resetOffset() { resetAngleOffset(); resetPosOffset(); } - /** - * Starts a camera shake effect that decays linearly over the given ticks. - * - * @param tick number of ticks the shake should last - * @param amplitude initial shake amplitude - */ - public void startShakeCamera(int tick, double amplitude) { + public void startShakeCamera(int tick, double amplitude) { this.amp = amplitude; this.ampStep = amp / (double) tick; this.tick = tick; } - /** - * Call each client tick. While a shake is active, randomises per-tick - * offsets and decays amplitude. - */ - public void tick() { + public void tick() { if (tick > 0) { ThreadLocalRandom rng = ThreadLocalRandom.current(); shakeXOffset = amp * rng.nextDouble(-0.5, 0.5); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/FourierPhotoUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/FourierPhotoUtil.java similarity index 87% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/FourierPhotoUtil.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/FourierPhotoUtil.java index 55e90a4..cc5c409 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/FourierPhotoUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/FourierPhotoUtil.java @@ -10,33 +10,13 @@ import java.util.*; import java.util.stream.Collectors; -/** - * Converts raster images into Fourier series representations for particle rendering. - *

- * The pipeline: - *

    - *
  1. Build a binary solid/transparent mask from the image
  2. - *
  3. Find connected components via flood-fill BFS
  4. - *
  5. Extract ordered contours via Moore boundary tracing
  6. - *
  7. Resample the contour to a fixed sample count
  8. - *
  9. Compute DFT coefficients
  10. - *
  11. Convert to {@link FourierSeriesBuilder.Fourier} entries
  12. - *
- */ public final class FourierPhotoUtil { public static final FourierPhotoUtil INSTANCE = new FourierPhotoUtil(); private FourierPhotoUtil() { } - - // ---- Public API ---- - - /** - * Converts an image into a single {@link FourierSeriesBuilder}. - * If the image has multiple connected components, only the first (largest) is used. - */ - public FourierSeriesBuilder toFourierBuilder(BufferedImage image, + public FourierSeriesBuilder toFourierBuilder(BufferedImage image, int alphaThreshold, int sampleCount, int harmonics, @@ -52,18 +32,11 @@ public FourierSeriesBuilder toFourierBuilder(BufferedImage image, return builders.get(0); } - /** - * Default-parameter overload. - */ - public FourierSeriesBuilder toFourierBuilder(BufferedImage image) { + public FourierSeriesBuilder toFourierBuilder(BufferedImage image) { return toFourierBuilder(image, 1, 1024, 150, 1.0, true, true); } - /** - * Converts an image into multiple {@link FourierSeriesBuilder}s, one per connected component. - * Components are sorted by size (largest first) and limited to {@code maxComponents}. - */ - public List toFourierBuilders(BufferedImage image, + public List toFourierBuilders(BufferedImage image, int alphaThreshold, int sampleCount, int harmonics, @@ -100,18 +73,11 @@ public List toFourierBuilders(BufferedImage image, return builders; } - /** - * Default-parameter overload. - */ - public List toFourierBuilders(BufferedImage image) { + public List toFourierBuilders(BufferedImage image) { return toFourierBuilders(image, 1, 1024, 150, 1.0, true, true, 16, 20); } - /** - * Like {@link #toFourierBuilders} but returns a map of offset -> builder, - * where each component's offset is relative to the image center. - */ - public Map toFourierBuildersWithOffset( + public Map toFourierBuildersWithOffset( BufferedImage image, int alphaThreshold, int sampleCount, @@ -163,18 +129,11 @@ public Map toFourierBuildersWithOffset( return result; } - /** - * Default-parameter overload. - */ - public Map toFourierBuildersWithOffset(BufferedImage image) { + public Map toFourierBuildersWithOffset(BufferedImage image) { return toFourierBuildersWithOffset(image, 1, 1024, 150, 1.0, true, 16, 20); } - /** - * Converts each connected component into a list of {@link RelativeLocation} points - * by building then evaluating a Fourier series. - */ - public List> toFourierPointsMulti(BufferedImage image, + public List> toFourierPointsMulti(BufferedImage image, int alphaThreshold, int sampleCount, int harmonics, @@ -190,15 +149,9 @@ public List> toFourierPointsMulti(BufferedImage image, .collect(Collectors.toList()); } - /** - * Default-parameter overload. - */ - public List> toFourierPointsMulti(BufferedImage image) { + public List> toFourierPointsMulti(BufferedImage image) { return toFourierPointsMulti(image, 1, 1024, 150, 1.0, true, true, 16, 20); } - - // ---- Internal: mask & components ---- - private boolean[] buildSolidMask(BufferedImage image, int alphaThreshold) { int w = image.getWidth(); int h = image.getHeight(); @@ -273,9 +226,6 @@ private double[] computeComponentCenterPx(int[] compPixels, int w) { int count = Math.max(compPixels.length, 1); return new double[]{sx / count, sy / count}; } - - // ---- Internal: contour extraction ---- - private List extractOrderedContourFromComponent(int width, int height, int[] componentPixels) { boolean[] compMask = new boolean[width * height]; for (int p : componentPixels) { @@ -317,10 +267,7 @@ private boolean isSolid(int x, int y, int w, int h, boolean[] mask) { return mask[y * w + x]; } - /** - * Moore neighborhood boundary tracing. - */ - private List traceMoore(Vector2i start, int w, int h, boolean[] mask) { + private List traceMoore(Vector2i start, int w, int h, boolean[] mask) { Vector2i[] dir = { new Vector2i(1, 0), new Vector2i(1, 1), new Vector2i(0, 1), new Vector2i(-1, 1), new Vector2i(-1, 0), new Vector2i(-1, -1), new Vector2i(0, -1), new Vector2i(1, -1) @@ -360,9 +307,6 @@ private List traceMoore(Vector2i start, int w, int h, boolean[] mask) return contour; } - - // ---- Internal: resampling & coordinate mapping ---- - private List resampleClosedPath(List path, int targetCount) { List pts = new ArrayList<>(path.size()); for (Vector2i v : path) { @@ -422,9 +366,6 @@ private List mapToXZ(List pts, int width, int height, double } return result; } - - // ---- Internal: DFT ---- - private Vector2d[] dft(List samples) { int n = samples.size(); Vector2d[] out = new Vector2d[n]; @@ -447,9 +388,6 @@ private Vector2d[] dft(List samples) { } return out; } - - // ---- Internal: coefficients to Fourier list ---- - private List coeffsToFouriers(Vector2d[] coeffs, int harmonics, boolean sortByAmplitude) { int n = coeffs.length; List all = new ArrayList<>(n); diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java new file mode 100644 index 0000000..5f49545 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.utils; + +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; + +public final class GraphMathHelper { + private GraphMathHelper() { + } + + public static Vec3 lerp(float alpha, Vec3 from, Vec3 to) { + return new Vec3( + Mth.lerp((double) alpha, from.x, to.x), + Mth.lerp((double) alpha, from.y, to.y), + Mth.lerp((double) alpha, from.z, to.z) + ); + } + + public static double inverseLerp(double value, double min, double max) { + if (max == min) { + return 0.0; + } + return (value - min) / (max - min); + } + + public static double smoothstep(double edge0, double edge1, double x) { + double t = Math.clamp(inverseLerp(x, edge0, edge1), 0.0, 1.0); + return t * t * (3.0 - 2.0 * t); + } + + public static double inversePowerFalloff(double dist, double range, double power) { + if (range <= 0.0) { + return 0.0; + } + double ratio = dist / range; + return 1.0 / (1.0 + Math.pow(ratio, power)); + } + + public static double expDampFactor(double damping, double dt) { + double factor = Math.exp(-damping * dt); + return Math.max(0.0, Math.min(1.0, factor)); + } +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ImageUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ImageUtil.java similarity index 65% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ImageUtil.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ImageUtil.java index 767e94c..61b2e24 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ImageUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ImageUtil.java @@ -15,13 +15,6 @@ import java.util.List; import java.util.Map; -/** - * Utility singleton for loading images from mod resources and converting - * them to particle point clouds. - *

- * Points are generated in the XZ plane (Y=0) with configurable step spacing. - * Only non-transparent pixels are included. - */ public final class ImageUtil { public static final ImageUtil INSTANCE = new ImageUtil(); @@ -29,13 +22,7 @@ public final class ImageUtil { private ImageUtil() { } - /** - * Loads a {@link BufferedImage} from the mod's resource path. - * - * @param id the resource location (namespace:path) - * @return the loaded image, or null if not found - */ - @Nullable + @Nullable public BufferedImage loadFromIdentifier(ResourceLocation id) { String path = "assets/" + id.getNamespace() + "/" + id.getPath(); try (InputStream stream = getClass().getClassLoader().getResourceAsStream(path)) { @@ -46,10 +33,7 @@ public BufferedImage loadFromIdentifier(ResourceLocation id) { } } - /** - * Scales an image by the given percentage (e.g. 0.5 = 50%). - */ - public BufferedImage scale(double scalePercent, BufferedImage image) { + public BufferedImage scale(double scalePercent, BufferedImage image) { int newWidth = (int) Math.round(image.getWidth() * scalePercent); int newHeight = (int) Math.round(image.getHeight() * scalePercent); BufferedImage result = new BufferedImage(newWidth, newHeight, image.getType()); @@ -62,15 +46,7 @@ public BufferedImage scale(double scalePercent, BufferedImage image) { return result; } - /** - * Converts non-transparent pixels to a list of {@link RelativeLocation} points - * in the XZ plane. - * - * @param image the source image - * @param step the spacing between pixel positions in world units - * @return list of points corresponding to non-transparent pixels - */ - public List toPoints(BufferedImage image, double step) { + public List toPoints(BufferedImage image, double step) { List result = new ArrayList<>(); for (int x = 0; x < image.getWidth(); x++) { for (int y = 0; y < image.getHeight(); y++) { @@ -82,14 +58,7 @@ public List toPoints(BufferedImage image, double step) { return result; } - /** - * Converts non-transparent pixels to a map of point -> alpha value. - * - * @param image the source image - * @param step the spacing in world units - * @return map from point to alpha (0-255) - */ - public Map toPointsWithAlpha(BufferedImage image, double step) { + public Map toPointsWithAlpha(BufferedImage image, double step) { Map result = new HashMap<>(); for (int x = 0; x < image.getWidth(); x++) { for (int y = 0; y < image.getHeight(); y++) { @@ -102,14 +71,7 @@ public Map toPointsWithAlpha(BufferedImage image, dou return result; } - /** - * Converts non-transparent pixels to a map of point -> full RGBA color int. - * - * @param image the source image - * @param step the spacing in world units - * @return map from point to ARGB color value - */ - public Map toPointsWithRGBA(BufferedImage image, double step) { + public Map toPointsWithRGBA(BufferedImage image, double step) { Map result = new HashMap<>(); for (int x = 0; x < image.getWidth(); x++) { for (int y = 0; y < image.getHeight(); y++) { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/LinearLevelLerp.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/LinearLevelLerp.java similarity index 93% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/LinearLevelLerp.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/LinearLevelLerp.java index 37af237..f8688e4 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/LinearLevelLerp.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/LinearLevelLerp.java @@ -8,10 +8,6 @@ import java.util.ArrayList; import java.util.List; -/** - * Multi-level linear interpolation utility. - * Supports chained interpolation levels for smooth multi-stage transitions. - */ public final class LinearLevelLerp { private List levels = new ArrayList<>(); private List prevLevels = new ArrayList<>(); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java similarity index 80% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java index 0a26dfb..b9fc50c 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java @@ -16,10 +16,6 @@ public static double length(double x, double y, double z) { return Math.sqrt(x * x + y * y + z * z); } - public static double lerp(double from, double to, double alpha) { - return from + (to - from) * alpha; - } - public static Vector3f colorOf(int r, int g, int b) { return new Vector3f( Math.clamp(r, 0, 255) / 255f, @@ -27,13 +23,7 @@ public static Vector3f colorOf(int r, int g, int b) { Math.clamp(b, 0, 255) / 255f); } - /** - * Compute Euler angles (pitch, yaw, roll) to orient towards the given target direction. - * - * @param target the target direction vector - * @return float array [pitch, yaw, roll] in radians - */ - public static float[] calculateEulerAnglesToPointArray(Vector3f target) { + public static float[] calculateEulerAnglesToPointArray(Vector3f target) { if (target.x == 0.0f && target.y == 0.0f && target.z == 0.0f) { return new float[]{0.0f, 0.0f, 0.0f}; } @@ -54,10 +44,7 @@ public static double getPitchFromLocation(RelativeLocation location) { return Math.atan2(-y, Math.sqrt(x * x + z * z)); } - /** - * Generate points along a line from start to end with the given step distance. - */ - public static List fillLine(RelativeLocation start, RelativeLocation end, double step) { + public static List fillLine(RelativeLocation start, RelativeLocation end, double step) { List result = new ArrayList<>(); double dist = start.distance(end); if (dist <= 0.0 || step <= 0.0) { @@ -79,15 +66,7 @@ public static List fillLine(RelativeLocation start, RelativeLo return result; } - /** - * Generate branching lightning bolt points from origin to target. - * - * @param target end point relative to origin - * @param segments number of line segments - * @param branches number of side branches - * @return list of points along the bolt path - */ - public static List getLightningEffectPoints(RelativeLocation target, int segments, int branches) { + public static List getLightningEffectPoints(RelativeLocation target, int segments, int branches) { List result = new ArrayList<>(); if (target == null || segments <= 0) return result; @@ -133,11 +112,7 @@ public static List getPolygonInCircleVertices(int sides, doubl return vertices; } - /** - * Rotates all points in-place around the given axis by the specified angle - * using Rodrigues' rotation formula. - */ - public static void rotateAsAxis(List points, RelativeLocation axis, double radians) { + public static void rotateAsAxis(List points, RelativeLocation axis, double radians) { if (points == null || points.isEmpty() || axis == null) return; double len = axis.length(); if (len < 1.0E-10) return; @@ -160,11 +135,7 @@ public static void rotateAsAxis(List points, RelativeLocation } } - /** - * Rotates all points in-place so that the current {@code fromAxis} direction - * is aligned to the {@code toAxis} direction. - */ - public static void rotatePointsToPoint(List points, RelativeLocation toAxis, RelativeLocation fromAxis) { + public static void rotatePointsToPoint(List points, RelativeLocation toAxis, RelativeLocation fromAxis) { if (points == null || points.isEmpty() || toAxis == null || fromAxis == null) return; double fromLen = fromAxis.length(); double toLen = toAxis.length(); @@ -201,10 +172,7 @@ public static void rotatePointsToPoint(List points, RelativeLo rotateAsAxis(points, rotAxis, angle); } - /** - * Returns a unit vector perpendicular to (x, y, z). - */ - private static RelativeLocation perpendicular(double x, double y, double z) { + private static RelativeLocation perpendicular(double x, double y, double z) { if (Math.abs(x) < 0.9) { // cross with (1, 0, 0) double cy = z; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/MathDataUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/MathDataUtil.java similarity index 94% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/MathDataUtil.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/MathDataUtil.java index 89a4de9..bd513e9 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/MathDataUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/MathDataUtil.java @@ -2,9 +2,6 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; -/** - * Bit manipulation utility for compact status storage in int/long containers. - */ public final class MathDataUtil { private MathDataUtil() { } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java similarity index 98% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java index 99451db..5b376f3 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java @@ -9,10 +9,6 @@ import java.util.List; import java.util.function.Function; -/** - * Preset particle shapes for Roman numeral display (I through XII). - * Each method returns a list of RelativeLocations forming the numeral shape. - */ public final class MathPresets { private MathPresets() { } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/NoiseMode.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/NoiseMode.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/NoiseMode.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/NoiseMode.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java similarity index 57% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java index d2f7820..abe062a 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java @@ -7,26 +7,12 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; +import net.minecraft.util.Mth; -/** - * Utility class for physics-related calculations including collision detection - * and movement resolution. - */ public final class PhysicsUtil { private PhysicsUtil() { } - - // ---- Collision / Raycast ---- - - /** - * Perform a block raycast from {@code currentPos} in the direction of {@code velocity}. - * - * @param currentPos the starting position - * @param velocity the movement delta - * @param world the world to raycast in - * @return the block hit result - */ - public static BlockHitResult collide(Vec3 currentPos, Vec3 velocity, Level world) { + public static BlockHitResult collide(Vec3 currentPos, Vec3 velocity, Level world) { ClipContext context = new ClipContext( currentPos, currentPos.add(velocity), @@ -37,31 +23,22 @@ public static BlockHitResult collide(Vec3 currentPos, Vec3 velocity, Level world return world.clip(context); } - /** - * Compute a position slightly before the collision point, offset along the surface normal. - * - * @param res the block hit result - * @return a position slightly offset from the hit point along the block normal - */ - public static Vec3 fixBeforeCollidePosition(BlockHitResult res) { + public static Vec3 fixBeforeCollidePosition(BlockHitResult res) { Direction dir = res.getDirection(); Vec3 normal = new Vec3(dir.getStepX(), dir.getStepY(), dir.getStepZ()); Vec3 location = res.getLocation(); Vec3 normalizedOffset = normal.normalize(); return location.add(normalizedOffset.scale(0.07)); } - - // ---- Drag / Steering (existing methods) ---- - public static RelativeLocation applyDrag(RelativeLocation velocity, double dragFactor) { return velocity.scale(dragFactor); } public static RelativeLocation steer(RelativeLocation velocity, RelativeLocation desired, double blend) { double clampedBlend = Math.clamp(blend, 0.0, 1.0); - velocity.setX(Math3DUtil.lerp(velocity.getX(), desired.getX(), clampedBlend)); - velocity.setY(Math3DUtil.lerp(velocity.getY(), desired.getY(), clampedBlend)); - velocity.setZ(Math3DUtil.lerp(velocity.getZ(), desired.getZ(), clampedBlend)); + velocity.setX(Mth.lerp(clampedBlend, velocity.getX(), desired.getX())); + velocity.setY(Mth.lerp(clampedBlend, velocity.getY(), desired.getY())); + velocity.setZ(Mth.lerp(clampedBlend, velocity.getZ(), desired.getZ())); return velocity; } diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ReflectUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ReflectUtil.java new file mode 100644 index 0000000..8181763 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ReflectUtil.java @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.utils; + +import com.mojang.logging.LogUtils; +import org.slf4j.Logger; + +import java.util.function.Supplier; + +public final class ReflectUtil { + + private static final Logger LOGGER = LogUtils.getLogger(); + + private ReflectUtil() { + } + + public static void infoTimeWith(String name, Runnable invoker) { + long start = System.currentTimeMillis(); + invoker.run(); + long end = System.currentTimeMillis(); + LOGGER.debug(name + " " + (end - start) + "ms"); + } + + public static void infoTimeWith(Runnable invoker) { + infoTimeWith("", invoker); + } + + public static T infoTimeCallable(String name, Supplier invoker) { + long start = System.currentTimeMillis(); + T result = invoker.get(); + long end = System.currentTimeMillis(); + LOGGER.debug(name + " " + (end - start) + "ms"); + return result; + } + + public static T infoTimeCallable(Supplier invoker) { + return infoTimeCallable("", invoker); + } +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/RelativeLocation.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/RelativeLocation.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/RelativeLocation.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/RelativeLocation.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/RotationMatrix.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/RotationMatrix.java similarity index 63% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/RotationMatrix.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/RotationMatrix.java index cd05844..855ec01 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/RotationMatrix.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/RotationMatrix.java @@ -2,10 +2,6 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; -/** - * 3D rotation matrix constructed from an axis-angle representation. - * Uses Rodrigues' rotation formula. - */ public final class RotationMatrix { private final double[][] matrix; @@ -13,17 +9,11 @@ private RotationMatrix(double[][] matrix) { this.matrix = matrix; } - /** - * Apply the rotation to a clone of the given point (does not modify the original). - */ - public RelativeLocation applyToClone(RelativeLocation point) { + public RelativeLocation applyToClone(RelativeLocation point) { return applyTo(point.copy()); } - /** - * Apply the rotation in-place and return the modified point. - */ - public RelativeLocation applyTo(RelativeLocation point) { + public RelativeLocation applyTo(RelativeLocation point) { double x = point.getX(); double y = point.getY(); double z = point.getZ(); @@ -33,13 +23,7 @@ public RelativeLocation applyTo(RelativeLocation point) { return point; } - /** - * Create a rotation matrix from an axis and angle (radians). - * - * @param axis the rotation axis (will be normalized internally) - * @param angle the rotation angle in radians - */ - public static RotationMatrix fromAxisAngle(RelativeLocation axis, double angle) { + public static RotationMatrix fromAxisAngle(RelativeLocation axis, double angle) { RelativeLocation u = axis.copy().normalize(); double cos = Math.cos(angle); double sin = Math.sin(angle); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ServerCameraUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ServerCameraUtil.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/ServerCameraUtil.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ServerCameraUtil.java diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/api/ModelPartPointCollector.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/api/ModelPartPointCollector.java new file mode 100644 index 0000000..d42b396 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/api/ModelPartPointCollector.java @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.utils.api; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.world.phys.Vec3; + +import java.util.List; + +public interface ModelPartPointCollector { + List collectSamplePoints(ModelPart root, PoseStack poseStack, int density, boolean pixelToUnit); + + default List collectSamplePoints(ModelPart root, PoseStack poseStack, int density) { + return collectSamplePoints(root, poseStack, density, true); + } +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/builder/FourierSeriesBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/FourierSeriesBuilder.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/builder/FourierSeriesBuilder.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/FourierSeriesBuilder.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/builder/ImagePointBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/ImagePointBuilder.java similarity index 88% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/builder/ImagePointBuilder.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/ImagePointBuilder.java index c4028a7..7e69bf8 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/builder/ImagePointBuilder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/ImagePointBuilder.java @@ -10,12 +10,6 @@ import java.util.ArrayList; import java.util.List; -/** - * Fluent builder that converts an image resource into a list of - * {@link RelativeLocation} points in the XZ plane. - *

- * Non-transparent pixels are mapped to points, centred around the origin. - */ public final class ImagePointBuilder { private final ResourceLocation image; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/builder/PointsBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/PointsBuilder.java similarity index 91% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/builder/PointsBuilder.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/PointsBuilder.java index a038d12..6bb4835 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/builder/PointsBuilder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/PointsBuilder.java @@ -118,18 +118,6 @@ public PointsBuilder pointsOnEach(Consumer consumer) { return this; } - /** - * @deprecated Math3DUtil is now all-static. Use {@code addAll(generator.apply(null))} or call Math3DUtil methods directly. - */ - @Deprecated - public PointsBuilder addWith(Function> generator) { - Collection generated = generator.apply(null); - if (generated != null) { - points.addAll(generated); - } - return this; - } - public PointsBuilder rotateAsAxis(double radians) { return rotateAsAxis(radians, axis); } @@ -189,11 +177,7 @@ public Map createWithStyleData(Function createWithCompositionData( + public Map createWithCompositionData( Function dataFactory) { return createWithStyleData(dataFactory); } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/builder/RGBImagePointBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/RGBImagePointBuilder.java similarity index 88% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/builder/RGBImagePointBuilder.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/RGBImagePointBuilder.java index 7cb9b17..9e15b3b 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/builder/RGBImagePointBuilder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/RGBImagePointBuilder.java @@ -10,13 +10,6 @@ import java.util.HashMap; import java.util.Map; -/** - * Fluent builder that converts an image resource into a map of - * {@link RelativeLocation} to ARGB colour int values. - *

- * Non-transparent pixels are mapped to points in the XZ plane, - * centred around the origin. - */ public final class RGBImagePointBuilder { private final ResourceLocation image; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/AlphaHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/AlphaHelper.java similarity index 85% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/AlphaHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/AlphaHelper.java index 256a468..d5a559a 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/AlphaHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/AlphaHelper.java @@ -4,11 +4,8 @@ import com.reiasu.reiparticlesapi.particles.Controllable; import com.reiasu.reiparticlesapi.utils.GraphMathHelper; +import net.minecraft.util.Mth; -/** - * Abstract helper that drives alpha (opacity) transitions over a tick-based timeline. - * Mirrors the pattern of {@link ScaleHelper} but for alpha values. - */ public abstract class AlphaHelper implements ParticleHelper { private double minAlpha; private double maxAlpha; @@ -66,10 +63,7 @@ protected final void setStep(double step) { this.step = step; } - /** - * Recalculate step size after changing min/max/tick parameters. - */ - public AlphaHelper recalculateStep() { + public AlphaHelper recalculateStep() { double temp = Math.min(minAlpha, maxAlpha); maxAlpha = Math.max(minAlpha, maxAlpha); minAlpha = temp; @@ -77,10 +71,7 @@ public AlphaHelper recalculateStep() { return this; } - /** - * Jump to the alpha value closest to the given value. - */ - public void toggleAlpha(double alpha) { + public void toggleAlpha(double alpha) { if (alpha <= minAlpha) { resetAlphaMin(); } else if (alpha >= maxAlpha) { @@ -121,7 +112,7 @@ public void doAlphaTo(int current) { resetAlphaMin(); } else { double progress = (double) current / (double) alphaTick; - double alpha = GraphMathHelper.lerp(progress, minAlpha, maxAlpha); + double alpha = Mth.lerp(progress, minAlpha, maxAlpha); setAlpha(alpha); } } @@ -132,7 +123,7 @@ public void increaseAlpha() { } current++; double progress = (double) current / (double) alphaTick; - double alpha = GraphMathHelper.lerp(progress, minAlpha, maxAlpha); + double alpha = Mth.lerp(progress, minAlpha, maxAlpha); setAlpha(alpha); } @@ -142,7 +133,7 @@ public void decreaseAlpha() { } current--; double progress = (double) current / (double) alphaTick; - double alpha = GraphMathHelper.lerp(progress, minAlpha, maxAlpha); + double alpha = Mth.lerp(progress, minAlpha, maxAlpha); setAlpha(alpha); } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/BezierValueScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/BezierValueScaleHelper.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/BezierValueScaleHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/BezierValueScaleHelper.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/HelperUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/HelperUtil.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/HelperUtil.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/HelperUtil.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementDirectionHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementDirectionHelper.java similarity index 80% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementDirectionHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementDirectionHelper.java index 443d580..a23a05e 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementDirectionHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementDirectionHelper.java @@ -4,10 +4,6 @@ import com.reiasu.reiparticlesapi.utils.RelativeLocation; -/** - * Moves a {@link RelativeLocation} reference by a direction vector each tick, - * up to a maximum number of ticks. - */ public final class MovementDirectionHelper { private final RelativeLocation reference; private RelativeLocation direction; @@ -50,20 +46,14 @@ public RelativeLocation getDefaultPos() { return defaultPos; } - /** - * Advance one tick: move the reference by the direction vector. - */ - public void next() { + public void next() { if (tick++ > maxTick) { return; } reference.add(direction); } - /** - * Reset the reference to its original position and tick counter to 0. - */ - public void reset() { + public void reset() { reference.setX(defaultPos.getX()); reference.setY(defaultPos.getY()); reference.setZ(defaultPos.getZ()); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementTargetHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementTargetHelper.java similarity index 77% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementTargetHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementTargetHelper.java index 7dfd2a6..33fe4f7 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementTargetHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementTargetHelper.java @@ -4,10 +4,6 @@ import com.reiasu.reiparticlesapi.utils.RelativeLocation; -/** - * Moves a {@link RelativeLocation} reference toward a target over a fixed number of ticks. - * Each call to {@link #next()} advances the reference by (target - default) / maxTick. - */ public final class MovementTargetHelper { private final RelativeLocation reference; private RelativeLocation target; @@ -41,18 +37,12 @@ public RelativeLocation getDefaultPos() { return defaultPos; } - /** - * Advance one tick toward the target. - */ - public void next() { + public void next() { RelativeLocation direction = target.minus(defaultPos).scale(1.0 / (double) maxTick); reference.add(direction); } - /** - * Reset the reference to its original position. - */ - public void reset() { + public void reset() { reference.setX(defaultPos.getX()); reference.setY(defaultPos.getY()); reference.setZ(defaultPos.getZ()); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ParticleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ParticleHelper.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ParticleHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ParticleHelper.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ProgressSequencedHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ProgressSequencedHelper.java similarity index 82% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ProgressSequencedHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ProgressSequencedHelper.java index 737c7ff..0fcb246 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ProgressSequencedHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ProgressSequencedHelper.java @@ -4,10 +4,6 @@ import com.reiasu.reiparticlesapi.particles.Controllable; -/** - * Abstract helper that drives sequenced progress (show/hide particles in sequence) - * over a tick-based timeline. - */ public abstract class ProgressSequencedHelper implements ParticleHelper { private int maxCount; private int progressMaxTick; @@ -60,28 +56,19 @@ protected final void setStep(double step) { this.step = step; } - /** - * Recalculate step size after changing maxCount or progressMaxTick. - */ - public ProgressSequencedHelper recalculateStep() { + public ProgressSequencedHelper recalculateStep() { this.step = (double) maxCount / (double) progressMaxTick; this.remainder = 0.0; return this; } - /** - * Set progress by a normalized percentage [0.0, 1.0]. - */ - public void setProgress(double percent) { + public void setProgress(double percent) { double clamped = Math.max(0.0, Math.min(1.0, percent)); int targetTick = (int) Math.round(clamped * (double) progressMaxTick); doProgressTo(targetTick); } - /** - * Advance progress by one tick (add particles). - */ - public void increaseProgress() { + public void increaseProgress() { if (over() || getLoadedStyle() == null) { return; } @@ -92,10 +79,7 @@ public void increaseProgress() { } } - /** - * Reverse progress by one tick (remove particles). - */ - public void decreaseProgress() { + public void decreaseProgress() { if (isZero() || getLoadedStyle() == null) { return; } @@ -106,10 +90,7 @@ public void decreaseProgress() { } } - /** - * Jump to a specific tick, adding or removing particles as needed. - */ - public void doProgressTo(int targetTick) { + public void doProgressTo(int targetTick) { if (getLoadedStyle() == null) { return; } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ScaleHelper.java similarity index 92% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ScaleHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ScaleHelper.java index b847039..b48754f 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ScaleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ScaleHelper.java @@ -4,6 +4,7 @@ import com.reiasu.reiparticlesapi.particles.Controllable; import com.reiasu.reiparticlesapi.utils.GraphMathHelper; +import net.minecraft.util.Mth; public abstract class ScaleHelper implements ParticleHelper { private double minScale; @@ -114,7 +115,7 @@ public void doScaleTo(int current) { resetScaleMin(); return; } - double lerp = GraphMathHelper.lerp((double) current / (double) scaleTick, minScale, maxScale); + double lerp = Mth.lerp((double) current / (double) scaleTick, minScale, maxScale); scale(lerp); } @@ -123,7 +124,7 @@ public void doScale() { return; } current++; - double lerp = GraphMathHelper.lerp((double) current / (double) scaleTick, minScale, maxScale); + double lerp = Mth.lerp((double) current / (double) scaleTick, minScale, maxScale); scale(lerp); } @@ -132,7 +133,7 @@ public void doScaleReversed() { return; } current--; - double lerp = GraphMathHelper.lerp((double) current / (double) scaleTick, minScale, maxScale); + double lerp = Mth.lerp((double) current / (double) scaleTick, minScale, maxScale); scale(lerp); } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedAnimationHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedAnimationHelper.java similarity index 91% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedAnimationHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedAnimationHelper.java index 02d8ea8..6c538fb 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedAnimationHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedAnimationHelper.java @@ -10,12 +10,6 @@ import java.util.Map; import java.util.function.Predicate; -/** - * Drives sequenced particle animations by evaluating predicate conditions - * each tick and adding/removing particles accordingly. - * - * @param the concrete {@link SequencedParticleStyle} type - */ public final class SequencedAnimationHelper { private final ArrayList, Integer>> animationConditions = new ArrayList<>(); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedCompositionAnimationHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedCompositionAnimationHelper.java similarity index 63% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedCompositionAnimationHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedCompositionAnimationHelper.java index fe14b42..45711d9 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedCompositionAnimationHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedCompositionAnimationHelper.java @@ -11,22 +11,9 @@ import java.util.Map; import java.util.function.Predicate; -/** - * Animation helper for {@link SequencedParticleComposition}. - *

- * Allows defining a series of animation steps, each gated by a predicate. - * When the predicate passes, the composition adds or removes the specified - * number of particles and advances to the next animation step. - * - * @param the concrete composition type - */ public final class SequencedCompositionAnimationHelper { - /** - * List of (predicate, count) pairs. When the predicate fires, - * the composition adds (positive) or removes (negative) the count. - */ - private final List, Integer>> animationConditions = new ArrayList<>(); + private final List, Integer>> animationConditions = new ArrayList<>(); private T composition; private int animationIndex; private boolean clientOnly; @@ -51,29 +38,17 @@ public void setClientOnly(boolean clientOnly) { this.clientOnly = clientOnly; } - /** - * Adds an animation step: when {@code displayAnimatePredicate} returns true, - * the composition will add or remove {@code nextCount} particles, then - * advance to the next step. - */ - public SequencedCompositionAnimationHelper addAnimate(int nextCount, Predicate displayAnimatePredicate) { + public SequencedCompositionAnimationHelper addAnimate(int nextCount, Predicate displayAnimatePredicate) { animationConditions.add(new AbstractMap.SimpleEntry<>(displayAnimatePredicate, nextCount)); return this; } - /** - * Marks this animation as client-only (server-side compositions will skip it). - */ - public SequencedCompositionAnimationHelper clientOnly() { + public SequencedCompositionAnimationHelper clientOnly() { this.clientOnly = true; return this; } - /** - * Attaches this helper to the given composition and installs a pre-tick - * action that drives the animation forward. - */ - @SuppressWarnings("unchecked") + @SuppressWarnings("unchecked") public SequencedCompositionAnimationHelper loadComposition(T comp) { this.composition = comp; comp.addPreTickAction(pc -> { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/StatusHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/StatusHelper.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/StatusHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/StatusHelper.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBuffer.java similarity index 69% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBuffer.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBuffer.java index cb3d0d0..4df73ef 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBuffer.java @@ -7,10 +7,6 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -/** - * Marks a field on a {@link com.reiasu.reiparticlesapi.particles.Controllable} for - * automatic buffer serialization. The {@link #name()} value is used as the buffer key. - */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface ControllableBuffer { diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBufferHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBufferHelper.java similarity index 82% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBufferHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBufferHelper.java index 00cfbc9..644112a 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBufferHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBufferHelper.java @@ -15,10 +15,6 @@ import java.util.List; import java.util.Map; -/** - * Reflection-based helper that reads/writes fields annotated with - * {@link ControllableBuffer} on a {@link Controllable} as buffer pairs. - */ public final class ControllableBufferHelper { public static final ControllableBufferHelper INSTANCE = new ControllableBufferHelper(); private static final Logger LOGGER = LoggerFactory.getLogger("ReiParticlesAPI"); @@ -26,11 +22,7 @@ public final class ControllableBufferHelper { private ControllableBufferHelper() { } - /** - * Collect all {@link ControllableBuffer}-annotated fields from the given - * {@link Controllable} and convert their values into buffer entries. - */ - public Map> getPairs(Controllable buf) { + public Map> getPairs(Controllable buf) { Map> res = new LinkedHashMap<>(); List annotatedFields = getAnnotatedFields(buf.getClass()); for (Field field : annotatedFields) { @@ -56,11 +48,7 @@ public Map> getPairs(Controllable buf return res; } - /** - * Write buffer values back into the {@link ControllableBuffer}-annotated fields - * of the given {@link Controllable}. - */ - public void setPairs(Controllable buf, Map> args) { + public void setPairs(Controllable buf, Map> args) { List annotatedFields = getAnnotatedFields(buf.getClass()); for (Field field : annotatedFields) { field.setAccessible(true); diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/emitters/LinearResistanceHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/emitters/LinearResistanceHelper.java new file mode 100644 index 0000000..581a15f --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/emitters/LinearResistanceHelper.java @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticlesapi.utils.helper.emitters; + +import net.minecraft.world.phys.Vec3; + +public final class LinearResistanceHelper { + public static Vec3 setPercentageVelocity(Vec3 enter, double percent) { + return enter.scale(percent); + } +} diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupBezierValueScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupBezierValueScaleHelper.java similarity index 86% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupBezierValueScaleHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupBezierValueScaleHelper.java index 71754d4..7ceef3b 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupBezierValueScaleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupBezierValueScaleHelper.java @@ -8,13 +8,6 @@ import com.reiasu.reiparticlesapi.utils.RelativeLocation; import com.reiasu.reiparticlesapi.utils.helper.BezierValueScaleHelper; -/** - * {@link BezierValueScaleHelper} implementation for particle groups - * (ControllableParticleGroup) using bezier-curved scale transitions. - *

- * Delegates scale operations through {@link ServerParticleGroup} or - * {@link ParticleGroupStyle} depending on the loaded controller type. - */ public final class GroupBezierValueScaleHelper extends BezierValueScaleHelper { private Controllable group; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupProgressSequencedHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupProgressSequencedHelper.java similarity index 85% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupProgressSequencedHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupProgressSequencedHelper.java index d10c836..dd4871b 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupProgressSequencedHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupProgressSequencedHelper.java @@ -6,12 +6,6 @@ import com.reiasu.reiparticlesapi.particles.Controllable; import com.reiasu.reiparticlesapi.utils.helper.ProgressSequencedHelper; -/** - * {@link ProgressSequencedHelper} implementation for sequenced particle groups - * (SequencedParticleGroup). - *

- * Delegates add/remove operations through {@link SequencedServerParticleGroup}. - */ public final class GroupProgressSequencedHelper extends ProgressSequencedHelper { private Controllable linkedStyle; @@ -47,10 +41,7 @@ protected void changeStatusBatch(int[] indexes, boolean status) { } } - /** - * Sync progress from server-side current tick to client-side display. - */ - public void syncProgressFromServer(int current) { + public void syncProgressFromServer(int current) { setCurrent(Math.max(0, Math.min(getProgressMaxTick(), current))); int targetCount = (int) Math.round( (double) current / (double) getProgressMaxTick() * (double) getMaxCount() diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupScaleHelper.java similarity index 86% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupScaleHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupScaleHelper.java index 93c8785..9bf315c 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupScaleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupScaleHelper.java @@ -7,12 +7,6 @@ import com.reiasu.reiparticlesapi.particles.Controllable; import com.reiasu.reiparticlesapi.utils.helper.ScaleHelper; -/** - * {@link ScaleHelper} implementation for particle groups (ControllableParticleGroup). - *

- * Delegates scale operations through {@link ServerParticleGroup} or - * {@link ParticleGroupStyle} depending on the loaded controller type. - */ public final class GroupScaleHelper extends ScaleHelper { private Controllable group; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/ParticleAlphaHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/ParticleAlphaHelper.java similarity index 88% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/ParticleAlphaHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/ParticleAlphaHelper.java index 938cf63..f220ec0 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/ParticleAlphaHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/ParticleAlphaHelper.java @@ -6,12 +6,6 @@ import com.reiasu.reiparticlesapi.particles.control.ParticleController; import com.reiasu.reiparticlesapi.utils.helper.AlphaHelper; -/** - * {@link AlphaHelper} implementation for a single particle controller. - *

- * Delegates alpha operations through {@link ParticleController} to the - * underlying {@link com.reiasu.reiparticlesapi.particles.ControllableParticle}. - */ public final class ParticleAlphaHelper extends AlphaHelper { private Controllable controller; private float currentAlpha = 1.0f; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleAlphaHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleAlphaHelper.java similarity index 86% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleAlphaHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleAlphaHelper.java index 3779dbd..d1804f4 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleAlphaHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleAlphaHelper.java @@ -7,13 +7,6 @@ import com.reiasu.reiparticlesapi.particles.control.ParticleController; import com.reiasu.reiparticlesapi.utils.helper.AlphaHelper; -/** - * {@link AlphaHelper} implementation for {@link ParticleGroupStyle}. - * Propagates alpha changes recursively to all particles in the style's hierarchy. - *

- * Propagates alpha changes to all particles in the style via - * {@link ParticleController} instances found in the style's particle map. - */ public final class StyleAlphaHelper extends AlphaHelper { private ParticleGroupStyle style; private float currentAlpha = 1.0f; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleBezierValueScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleBezierValueScaleHelper.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleBezierValueScaleHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleBezierValueScaleHelper.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleProgressSequencedHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleProgressSequencedHelper.java similarity index 84% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleProgressSequencedHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleProgressSequencedHelper.java index da8291a..735403a 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleProgressSequencedHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleProgressSequencedHelper.java @@ -6,11 +6,6 @@ import com.reiasu.reiparticlesapi.particles.Controllable; import com.reiasu.reiparticlesapi.utils.helper.ProgressSequencedHelper; -/** - * {@link ProgressSequencedHelper} implementation for {@link com.reiasu.reiparticlesapi.network.particle.style.SequencedParticleStyle}. - *

- * Delegates add/remove operations through {@link SequencedParticleStyle}. - */ public final class StyleProgressSequencedHelper extends ProgressSequencedHelper { private Controllable linkedStyle; @@ -46,10 +41,7 @@ protected void changeStatusBatch(int[] indexes, boolean status) { } } - /** - * Sync progress from server-side current tick to client-side display. - */ - public void syncProgressFromServer(int current) { + public void syncProgressFromServer(int current) { setCurrent(Math.max(0, Math.min(getProgressMaxTick(), current))); int targetCount = (int) Math.round( (double) current / (double) getProgressMaxTick() * (double) getMaxCount() diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleScaleHelper.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleScaleHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleScaleHelper.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleStatusHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleStatusHelper.java similarity index 100% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleStatusHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleStatusHelper.java diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionAlphaHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionAlphaHelper.java similarity index 75% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionAlphaHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionAlphaHelper.java index 3a1c77d..3122ad2 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionAlphaHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionAlphaHelper.java @@ -6,13 +6,6 @@ import com.reiasu.reiparticlesapi.particles.Controllable; import com.reiasu.reiparticlesapi.utils.helper.AlphaHelper; -/** - * {@link AlphaHelper} implementation for {@link ParticleComposition}. - * Uses BFS traversal to propagate alpha to all nested particles/styles/groups. - *

- * Uses BFS traversal through composition children to propagate alpha - * to all leaf {@link ParticleController} instances. - */ public final class CompositionAlphaHelper extends AlphaHelper { private ParticleComposition composition; private double alpha = 1.0; @@ -44,10 +37,7 @@ public void loadController(Controllable controller) { // ParticleComposition is not a Controllable in the current forge-port } - /** - * Directly load a composition reference. - */ - public void loadComposition(ParticleComposition composition) { + public void loadComposition(ParticleComposition composition) { this.composition = composition; } } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionBezierScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionBezierScaleHelper.java similarity index 86% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionBezierScaleHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionBezierScaleHelper.java index ccc5c95..6ac0090 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionBezierScaleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionBezierScaleHelper.java @@ -7,10 +7,6 @@ import com.reiasu.reiparticlesapi.utils.RelativeLocation; import com.reiasu.reiparticlesapi.utils.helper.BezierValueScaleHelper; -/** - * {@link BezierValueScaleHelper} implementation that delegates scale operations - * to a {@link ParticleComposition} using bezier-curved transitions. - */ public final class CompositionBezierScaleHelper extends BezierValueScaleHelper { private ParticleComposition composition; @@ -56,10 +52,7 @@ public void loadController(Controllable controller) { } } - /** - * Directly load a composition reference. - */ - public void loadComposition(ParticleComposition composition) { + public void loadComposition(ParticleComposition composition) { this.composition = composition; if (composition != null) { composition.scale(getMinScale()); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionScaleHelper.java similarity index 82% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionScaleHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionScaleHelper.java index 4ee8fd2..1aa1899 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionScaleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionScaleHelper.java @@ -6,10 +6,6 @@ import com.reiasu.reiparticlesapi.particles.Controllable; import com.reiasu.reiparticlesapi.utils.helper.ScaleHelper; -/** - * {@link ScaleHelper} implementation that delegates scale operations to a - * {@link ParticleComposition}. - */ public final class CompositionScaleHelper extends ScaleHelper { private ParticleComposition composition; @@ -49,11 +45,7 @@ public void loadController(Controllable controller) { } } - /** - * Directly load a composition reference (for use when ParticleComposition - * doesn't implement Controllable yet). - */ - public void loadComposition(ParticleComposition composition) { + public void loadComposition(ParticleComposition composition) { this.composition = composition; if (composition != null) { composition.scale(getMinScale()); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionStatusHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionStatusHelper.java similarity index 84% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionStatusHelper.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionStatusHelper.java index eb11b50..8183dc0 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionStatusHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionStatusHelper.java @@ -6,12 +6,6 @@ import com.reiasu.reiparticlesapi.particles.Controllable; import com.reiasu.reiparticlesapi.utils.helper.StatusHelper; -/** - * {@link StatusHelper} implementation for {@link ParticleComposition}. - * Attaches a pre-tick action that increments the current counter when the - * status is DISABLE, and removes the composition when the counter reaches - * the closed interval. - */ public final class CompositionStatusHelper extends StatusHelper { private ParticleComposition composition; private boolean init; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/Interpolator.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/Interpolator.java similarity index 85% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/Interpolator.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/Interpolator.java index fc19dc2..2e80be7 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/Interpolator.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/Interpolator.java @@ -8,9 +8,6 @@ import java.util.List; -/** - * Interpolator interface for generating refined point lists between inserted control points. - */ public interface Interpolator { double getRefinerCount(); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorData.java similarity index 62% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorData.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorData.java index 07bbcf3..c01c3de 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorData.java @@ -2,12 +2,6 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.interpolator.data; -/** - * Generic interpolation data container. - * Stores a current value and provides interpolated results based on a progress factor. - * - * @param the value type - */ public interface InterpolatorData { InterpolatorData update(T current); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorDouble.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorDouble.java similarity index 94% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorDouble.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorDouble.java index c7dec03..71fde20 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorDouble.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorDouble.java @@ -3,10 +3,8 @@ package com.reiasu.reiparticlesapi.utils.interpolator.data; import com.reiasu.reiparticlesapi.utils.GraphMathHelper; +import net.minecraft.util.Mth; -/** - * Interpolated double value with lerp support. - */ public final class InterpolatorDouble implements InterpolatorData { private double value; private double last; @@ -36,7 +34,7 @@ public InterpolatorDouble update(Double current) { @Override public Double getWithInterpolator(Number progress) { - return GraphMathHelper.lerp(progress.doubleValue(), last, value); + return Mth.lerp(progress.doubleValue(), last, value); } @Override diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorFloat.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorFloat.java similarity index 94% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorFloat.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorFloat.java index a917c32..ba47e15 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorFloat.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorFloat.java @@ -3,10 +3,8 @@ package com.reiasu.reiparticlesapi.utils.interpolator.data; import com.reiasu.reiparticlesapi.utils.GraphMathHelper; +import net.minecraft.util.Mth; -/** - * Interpolated float value with lerp support. - */ public final class InterpolatorFloat implements InterpolatorData { private float value; private float last; @@ -36,7 +34,7 @@ public InterpolatorFloat update(Float current) { @Override public Float getWithInterpolator(Number progress) { - return (float) GraphMathHelper.lerp(progress.doubleValue(), last, value); + return (float) Mth.lerp(progress.doubleValue(), last, value); } @Override diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorRelativeLocation.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorRelativeLocation.java similarity index 80% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorRelativeLocation.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorRelativeLocation.java index b5efc4c..d8fce4b 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorRelativeLocation.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorRelativeLocation.java @@ -4,10 +4,8 @@ import com.reiasu.reiparticlesapi.utils.GraphMathHelper; import com.reiasu.reiparticlesapi.utils.RelativeLocation; +import net.minecraft.util.Mth; -/** - * Interpolated RelativeLocation value with component-wise lerp. - */ public final class InterpolatorRelativeLocation implements InterpolatorData { private RelativeLocation value; private RelativeLocation last; @@ -36,9 +34,9 @@ public InterpolatorRelativeLocation update(RelativeLocation current) { public RelativeLocation getWithInterpolator(Number progress) { double p = progress.doubleValue(); return new RelativeLocation( - GraphMathHelper.lerp(p, last.getX(), value.getX()), - GraphMathHelper.lerp(p, last.getY(), value.getY()), - GraphMathHelper.lerp(p, last.getZ(), value.getZ()) + Mth.lerp(p, last.getX(), value.getX()), + Mth.lerp(p, last.getY(), value.getY()), + Mth.lerp(p, last.getZ(), value.getZ()) ); } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVec3d.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVec3d.java similarity index 80% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVec3d.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVec3d.java index cd7ad93..6dbfac9 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVec3d.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVec3d.java @@ -4,10 +4,8 @@ import com.reiasu.reiparticlesapi.utils.GraphMathHelper; import net.minecraft.world.phys.Vec3; +import net.minecraft.util.Mth; -/** - * Interpolated Vec3 value with component-wise lerp. - */ public final class InterpolatorVec3d implements InterpolatorData { private Vec3 value; private Vec3 last; @@ -36,9 +34,9 @@ public InterpolatorVec3d update(Vec3 current) { public Vec3 getWithInterpolator(Number progress) { double p = progress.doubleValue(); return new Vec3( - GraphMathHelper.lerp(p, last.x, value.x), - GraphMathHelper.lerp(p, last.y, value.y), - GraphMathHelper.lerp(p, last.z, value.z) + Mth.lerp(p, last.x, value.x), + Mth.lerp(p, last.y, value.y), + Mth.lerp(p, last.z, value.z) ); } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVector3f.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVector3f.java similarity index 79% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVector3f.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVector3f.java index 5747fbe..e25d2db 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVector3f.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVector3f.java @@ -4,10 +4,8 @@ import com.reiasu.reiparticlesapi.utils.GraphMathHelper; import org.joml.Vector3f; +import net.minecraft.util.Mth; -/** - * Interpolated Vector3f value with component-wise lerp. - */ public final class InterpolatorVector3f implements InterpolatorData { private Vector3f value; private Vector3f last; @@ -36,9 +34,9 @@ public InterpolatorVector3f update(Vector3f current) { public Vector3f getWithInterpolator(Number progress) { double p = progress.doubleValue(); return new Vector3f( - (float) GraphMathHelper.lerp(p, last.x, value.x), - (float) GraphMathHelper.lerp(p, last.y, value.y), - (float) GraphMathHelper.lerp(p, last.z, value.z) + (float) Mth.lerp(p, last.x, value.x), + (float) Mth.lerp(p, last.y, value.y), + (float) Mth.lerp(p, last.z, value.z) ); } diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/emitters/LineEmitterInterpolator.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/emitters/LineEmitterInterpolator.java similarity index 94% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/emitters/LineEmitterInterpolator.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/emitters/LineEmitterInterpolator.java index 227ccba..dfed38a 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/emitters/LineEmitterInterpolator.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/emitters/LineEmitterInterpolator.java @@ -13,10 +13,6 @@ import java.util.Collections; import java.util.List; -/** - * Line-segment interpolator for emitter trails. - * Inserts two control points and fills the line between them. - */ public final class LineEmitterInterpolator implements Interpolator { private double limit = 256.0; private final CircularQueue queue = new CircularQueue<>(2); diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/CircleParticleInterpolator.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/CircleParticleInterpolator.java similarity index 90% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/CircleParticleInterpolator.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/CircleParticleInterpolator.java index 3ca2f07..ba474f5 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/CircleParticleInterpolator.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/CircleParticleInterpolator.java @@ -8,17 +8,15 @@ import com.reiasu.reiparticlesapi.utils.interpolator.Interpolator; import net.minecraft.world.phys.Vec3; import org.joml.Vector3f; +import net.minecraft.util.Mth; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.function.BiConsumer; import java.util.function.Supplier; +import net.minecraft.util.Mth; -/** - * Arc-based particle interpolator. Generates intermediate points along a circular arc - * between two positions, relative to a moving origin. - */ public final class CircleParticleInterpolator implements Interpolator { private final Supplier originProvider; private double refinerCount; @@ -83,18 +81,12 @@ public CircleParticleInterpolator setRefiner(double refiner) { return this; } - /** - * Set the rotation transform applied before arc interpolation. - */ - public CircleParticleInterpolator setRotater(BiConsumer> rotater) { + public CircleParticleInterpolator setRotater(BiConsumer> rotater) { this.rotater = rotater; return this; } - /** - * Set the inverse rotation transform applied after arc interpolation. - */ - public CircleParticleInterpolator setRotaterBack(BiConsumer> rotaterBack) { + public CircleParticleInterpolator setRotaterBack(BiConsumer> rotaterBack) { this.rotaterBack = rotaterBack; return this; } @@ -135,7 +127,7 @@ public List getRefinedResult() { for (int i = 0; i <= count; i++) { double t = (double) i / (double) count; - double r = GraphMathHelper.lerp(t, dist0, dist1); + double r = Mth.lerp(t, dist0, dist1); double a = angle * t; // Slerp-like interpolation diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/DirectParticleInterpolator.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/DirectParticleInterpolator.java similarity index 93% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/DirectParticleInterpolator.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/DirectParticleInterpolator.java index 194eaa3..8428c1e 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/DirectParticleInterpolator.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/DirectParticleInterpolator.java @@ -12,10 +12,6 @@ import java.util.Collections; import java.util.List; -/** - * Simple direct (straight-line) particle interpolator between two points. - * Generates intermediate points along a line from the old position to the new position. - */ public final class DirectParticleInterpolator implements Interpolator { private double refinerCount = 2.0; private double limit = 256.0; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java similarity index 90% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java index 7b9cfb2..5b62a05 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java @@ -5,29 +5,6 @@ import java.util.HashMap; import java.util.Map; -/** - * Lightweight mathematical expression evaluator. - *

- * Supports: - *

    - *
  • Arithmetic: {@code + - * / % ^}
  • - *
  • Unary minus
  • - *
  • Parentheses
  • - *
  • Variables (case-sensitive): set via {@link #with(String, double)}
  • - *
  • Constants: {@code PI}, {@code E}
  • - *
  • Functions: {@code sin cos tan asin acos atan sqrt abs floor ceil log exp pow min max}
  • - *
- *

- * Thread-safety: instances are not thread-safe. Create one per thread - * or synchronise externally. - *

- * Usage: - *

{@code
- * double result = new ExpressionEvaluator("sin(t * PI / 180)")
- *         .with("t", 90)
- *         .evaluate();
- * }
- */ public final class ExpressionEvaluator { private final String expression; diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/presets/FourierPresets.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/presets/FourierPresets.java similarity index 77% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/presets/FourierPresets.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/presets/FourierPresets.java index ae57c28..dedb139 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/presets/FourierPresets.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/presets/FourierPresets.java @@ -4,23 +4,15 @@ import com.reiasu.reiparticlesapi.utils.builder.FourierSeriesBuilder; -/** - * Pre-built Fourier series configurations for common geometric shapes. - */ public final class FourierPresets { - public static final FourierPresets INSTANCE = new FourierPresets(); - - private FourierPresets() { - } - - public FourierSeriesBuilder pentagon() { + public static FourierSeriesBuilder pentagon() { return new FourierSeriesBuilder() .addFourier(3.0, 2.0, 0.0) .addFourier(1.0, -8.0, 0.0) .addFourier(3.0, 2.0, 0.0); } - public FourierSeriesBuilder clover() { + public static FourierSeriesBuilder clover() { return new FourierSeriesBuilder() .addFourier(3.0, 2.0, 0.0) .addFourier(1.0, -8.0, 0.0) @@ -28,21 +20,21 @@ public FourierSeriesBuilder clover() { .addFourier(6.0, -2.0, 0.0); } - public FourierSeriesBuilder boomerang() { + public static FourierSeriesBuilder boomerang() { return new FourierSeriesBuilder() .addFourier(3.0, 1.0, 0.0) .addFourier(7.0, -2.0, 0.0) .addFourier(2.0, 4.0, 0.0); } - public FourierSeriesBuilder runesOnAllSides() { + public static FourierSeriesBuilder runesOnAllSides() { return new FourierSeriesBuilder() .addFourier(3.0, -1.0, 0.0) .addFourier(7.0, -5.0, 0.0) .addFourier(2.0, 11.0, 0.0); } - public FourierSeriesBuilder knot() { + public static FourierSeriesBuilder knot() { return new FourierSeriesBuilder() .addFourier(3.0, -1.0, 0.0) .addFourier(0.0, -5.0, 0.0) @@ -50,7 +42,7 @@ public FourierSeriesBuilder knot() { .addFourier(4.0, -4.0, 0.0); } - public FourierSeriesBuilder circlesAndTriangles() { + public static FourierSeriesBuilder circlesAndTriangles() { return new FourierSeriesBuilder() .addFourier(3.0, -1.0, 0.0) .addFourier(0.0, -5.0, 0.0) @@ -58,7 +50,7 @@ public FourierSeriesBuilder circlesAndTriangles() { .addFourier(5.0, 2.0, 0.0); } - public FourierSeriesBuilder bowsOnAllSides() { + public static FourierSeriesBuilder bowsOnAllSides() { return new FourierSeriesBuilder() .addFourier(3.0, -1.0, 0.0) .addFourier(-3.0, -5.0, 0.0) @@ -68,7 +60,7 @@ public FourierSeriesBuilder bowsOnAllSides() { .addFourier(1.0, 3.0, 0.0); } - public FourierSeriesBuilder rhombic() { + public static FourierSeriesBuilder rhombic() { return new FourierSeriesBuilder() .addFourier(-3.0, 1.0, 0.0) .addFourier(-9.0, -3.0, 0.0) diff --git a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java similarity index 82% rename from forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java rename to forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java index 5057651..071719a 100644 --- a/forge-port-api/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java @@ -4,13 +4,6 @@ import java.util.function.Supplier; -/** - * Lazy-initialized memoization container. - * The value is computed on first access via the supplier and cached. - * Can be manually overridden or reset. - * - * @param the cached value type - */ public final class Memo { private final Supplier supplier; private volatile T memo; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/ReiParticleSkillForge.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/ReiParticleSkillForge.java index a287938..f70688b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/ReiParticleSkillForge.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/ReiParticleSkillForge.java @@ -48,18 +48,19 @@ public ReiParticleSkillForge(IEventBus modBus, ModContainer container) { EndRespawnWatcher.tickServer(event.getServer(), endRespawnBridge, LOGGER); ServerListener.onServerPostTick(event.getServer()); }); + NeoForge.EVENT_BUS.addListener((net.neoforged.neoforge.event.server.ServerStoppedEvent event) -> + EndRespawnWatcher.clearTrackers()); ReiParticlesAPI.init(); ReiParticlesAPI.INSTANCE.loadScannerPackages(); - registerApiListeners(); registerRuntimePorts(); ReiParticlesAPI.INSTANCE.registerTest(); - LOGGER.info("ReiParticleSkill NeoForge runtime initialized"); + } private void onClientSetup() { - LOGGER.info("ReiParticleSkill client setup completed"); + } private void onRegisterCommands(com.mojang.brigadier.CommandDispatcher dispatcher) { @@ -68,16 +69,7 @@ private void onRegisterCommands(com.mojang.brigadier.CommandDispatcher - * Removed to reduce mod conflicts: the {@code @EventBusSubscriber} caused - * this class to always participate in the event chain regardless of config, - * and mutating entity state globally conflicted with other mods. - *

- * Beam suppression is now handled solely by - * {@link com.reiasu.reiparticleskill.mixin.EndCrystalRendererMixin}, - * which uses a surgical {@code @Redirect} on {@code getBeamTarget()} and - * is gated by {@link com.reiasu.reiparticleskill.config.SkillClientConfig#isSuppressCrystalBeam()}. - * - * @deprecated No longer used. Will be removed in a future version. - */ @Deprecated public final class EndCrystalBeamSuppressor { private EndCrystalBeamSuppressor() { diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/NoBeamEndCrystalRenderer.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/NoBeamEndCrystalRenderer.java index 9c77f45..1fe8bb3 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/NoBeamEndCrystalRenderer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/NoBeamEndCrystalRenderer.java @@ -9,12 +9,6 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.entity.boss.enderdragon.EndCrystal; -/** - * Custom End Crystal renderer that suppresses the vanilla beam. - * Temporarily clears beamTarget before delegating to the vanilla - * renderer, then restores it. This is deterministic with no timing - * races because it runs entirely on the Render thread. - */ public class NoBeamEndCrystalRenderer extends EndCrystalRenderer { public NoBeamEndCrystalRenderer(EntityRendererProvider.Context context) { diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SkillEnchantments.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SkillEnchantments.java index 743ad43..ecbc35a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SkillEnchantments.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SkillEnchantments.java @@ -12,11 +12,6 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.neoforged.bus.api.IEventBus; -/** - * In MC 1.21+, enchantments are data-driven. - * The sword_light enchantment is defined in: - * {@code data/reiparticleskill/enchantment/sword_light.json} - */ public final class SkillEnchantments { public static final ResourceKey SWORD_LIGHT = diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/ClientEmitterFactory.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/ClientEmitterFactory.java index 2c826eb..1a2beb2 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/ClientEmitterFactory.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/ClientEmitterFactory.java @@ -14,11 +14,6 @@ import java.util.ArrayList; import java.util.List; -/** - * Creates and manages client-rendered particle emitters for the - * dragon respawn animation phases. Emitter parameters are defined - * as named presets instead of inline magic numbers. - */ final class ClientEmitterFactory { // --- Rotation speed presets --- diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonGravityTracker.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonGravityTracker.java index f8055d3..fb0dc33 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonGravityTracker.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonGravityTracker.java @@ -13,10 +13,6 @@ import java.util.Map; import java.util.UUID; -/** - * Tracks ender dragons whose gravity has been temporarily disabled - * and restores it after a configured number of ticks. - */ final class DragonGravityTracker { private final Map restoreTicks = new HashMap<>(); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonRespawnAnimationDirector.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonRespawnAnimationDirector.java index c897e06..f44c65f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonRespawnAnimationDirector.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonRespawnAnimationDirector.java @@ -19,36 +19,27 @@ import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; import java.util.IdentityHashMap; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Set; import java.util.UUID; public final class DragonRespawnAnimationDirector { - private static final int PILLAR_EVENT_DELAY_TICKS = 39; private static final Vec3 ANCHOR_OFFSET = new Vec3(0.0, 130.5, 0.0); private static final double GRAVITY_RANGE = 32.0; private static final double CRYSTAL_SEARCH_RADIUS = 96.0; - private static final double PILLAR_RING_RADIUS = 56.0; - private static final double PILLAR_RING_Y_OFFSET = 80.0; private final ClientEmitterFactory clientEmitters = new ClientEmitterFactory(); private final DragonGravityTracker gravityTracker = new DragonGravityTracker(); + private final PillarPulseScheduler pulseScheduler = new PillarPulseScheduler(); private final List activeEmitters = new ArrayList<>(); private final Set pulseScopedEmitters = Collections.newSetFromMap(new IdentityHashMap<>()); private final List activePillarCrafters = new ArrayList<>(); private final RandomSource random = RandomSource.create(); - private final Map crystalBeamTargets = new HashMap<>(); - private final Map pendingPillarPulseTicks = new HashMap<>(); private EndRespawnPhase activePhase; private ServerLevel activeLevel; private boolean active; - private int pillarPulseIndex; - private long lastPillarPulseTick = Long.MIN_VALUE; public void setup(ServerLevel level, Vec3 center) { if (active) { @@ -70,9 +61,7 @@ public int next(ServerLevel level, Vec3 center, EndRespawnPhase phase, long phas } activePhase = phase; if (phase != EndRespawnPhase.SUMMON_PILLARS) { - crystalBeamTargets.clear(); - pendingPillarPulseTicks.clear(); - lastPillarPulseTick = Long.MIN_VALUE; + pulseScheduler.clear(); } if (phase == EndRespawnPhase.BEFORE_END_WAITING) { activeEmitters.removeIf(pulseScopedEmitters::contains); @@ -86,7 +75,9 @@ public int next(ServerLevel level, Vec3 center, EndRespawnPhase phase, long phas } if (phase == EndRespawnPhase.SUMMON_PILLARS) { - maybeTriggerPillarPulse(level, center, phaseTick); + for (PillarPulseScheduler.PulseResult pulse : pulseScheduler.tick(level, center, phaseTick)) { + handleOncePillars(level, center, pulse.pillarCenter(), pulse.preferredCrystalId()); + } } if (phase == EndRespawnPhase.END && phaseTick == 0) { handleEnd(level, center); @@ -118,11 +109,8 @@ private void resetState() { activeEmitters.clear(); pulseScopedEmitters.clear(); activePillarCrafters.clear(); - pillarPulseIndex = 0; - crystalBeamTargets.clear(); - pendingPillarPulseTicks.clear(); + pulseScheduler.clear(); gravityTracker.clear(); - lastPillarPulseTick = Long.MIN_VALUE; } public String debugState() { @@ -132,7 +120,7 @@ public String debugState() { + ", emitters=" + activeEmitters.size() + ", pulse_emitters=" + pulseScopedEmitters.size() + ", pillar_crafters=" + activePillarCrafters.size() - + ", pending_pulses=" + pendingPillarPulseTicks.size() + + ", pulse_scheduler=active" + ", no_gravity_dragons=" + gravityTracker.trackedCount(); } @@ -142,7 +130,7 @@ public void handleOncePillars(ServerLevel level, Vec3 center, Vec3 pillarCenter) private void handleOncePillars(ServerLevel level, Vec3 center, Vec3 pillarCenter, UUID preferredCrystalId) { Vec3 anchor = pillarCenter == null ? center : pillarCenter; - EndCrystal crystal = resolvePulseCrystal(level, center, anchor, preferredCrystalId); + EndCrystal crystal = EndDragonFightHelper.resolvePulseCrystal(level, center, anchor, preferredCrystalId, CRYSTAL_SEARCH_RADIUS); Vec3 start = anchor; Vec3 target = Vec3.ZERO; if (crystal != null) { @@ -178,7 +166,7 @@ private void handleOncePillars(ServerLevel level, Vec3 center, Vec3 pillarCenter .setSpeed(1.5); activeEmitters.add(burst); pulseScopedEmitters.add(burst); - pillarPulseIndex++; + pulseScheduler.nextPulseIndex(); } public void handleEnd(ServerLevel level, Vec3 center) { @@ -220,8 +208,7 @@ private void reconfigureEmittersForPhase(ServerLevel level, Vec3 center, EndResp activeEmitters.clear(); pulseScopedEmitters.clear(); activePillarCrafters.clear(); - crystalBeamTargets.clear(); - pendingPillarPulseTicks.clear(); + pulseScheduler.clear(); switch (phase) { case START -> { CollectEnderPowerEmitter emitter = new CollectEnderPowerEmitter(600) @@ -259,112 +246,6 @@ private void reconfigureEmittersForPhase(ServerLevel level, Vec3 center, EndResp } } - private void maybeTriggerPillarPulse(ServerLevel level, Vec3 center, long phaseTick) { - List crystals = level.getEntitiesOfClass( - EndCrystal.class, - new AABB(center, center).inflate(CRYSTAL_SEARCH_RADIUS), - EndCrystal::isAlive - ); - Set seen = new HashSet<>(); - for (EndCrystal crystal : crystals) { - UUID uuid = crystal.getUUID(); - seen.add(uuid); - BlockPos beam = crystal.getBeamTarget(); - if (beam == null) { - continue; - } - BlockPos prev = crystalBeamTargets.put(uuid, beam.immutable()); - if (prev == null || !prev.equals(beam)) { - pendingPillarPulseTicks.put(beam.immutable(), new PendingPillarPulse(phaseTick + PILLAR_EVENT_DELAY_TICKS, uuid)); - } - } - crystalBeamTargets.keySet().removeIf(uuid -> !seen.contains(uuid)); - - boolean fired = false; - Iterator> pendingIterator = pendingPillarPulseTicks.entrySet().iterator(); - while (pendingIterator.hasNext()) { - Map.Entry pending = pendingIterator.next(); - PendingPillarPulse pulse = pending.getValue(); - if (pulse.triggerTick() > phaseTick) { - continue; - } - handleOncePillars(level, center, Vec3.atCenterOf(pending.getKey()), pulse.crystalId()); - pendingIterator.remove(); - fired = true; - } - if (fired) { - lastPillarPulseTick = phaseTick; - return; - } - - // Prefer strict "beam-target changed" triggering. Fallback is only used once - // when no beam targets are visible yet to avoid missing the first pulse. - if (!pendingPillarPulseTicks.isEmpty()) { - return; - } - if (!crystalBeamTargets.isEmpty()) { - return; - } - if (lastPillarPulseTick != Long.MIN_VALUE) { - return; - } - Vec3 fallback = chooseFallbackPillarTarget(crystals, center); - handleOncePillars(level, center, fallback); - lastPillarPulseTick = phaseTick; - } - - private Vec3 chooseFallbackPillarTarget(List crystals, Vec3 center) { - if (!crystals.isEmpty()) { - EndCrystal crystal = crystals.get(Math.floorMod(pillarPulseIndex, crystals.size())); - BlockPos beam = crystal.getBeamTarget(); - if (beam != null) { - return Vec3.atCenterOf(beam); - } - return crystal.position(); - } - double angle = (Math.PI * 2.0 * (pillarPulseIndex % 10)) / 10.0; - return center.add(Math.cos(angle) * PILLAR_RING_RADIUS, PILLAR_RING_Y_OFFSET, Math.sin(angle) * PILLAR_RING_RADIUS); - } - - private EndCrystal resolvePulseCrystal(ServerLevel level, Vec3 center, Vec3 anchor, UUID preferredCrystalId) { - if (preferredCrystalId != null) { - net.minecraft.world.entity.Entity entity = level.getEntity(preferredCrystalId); - if (entity instanceof EndCrystal preferred && preferred.isAlive()) { - return preferred; - } - } - - List nearAnchor = level.getEntitiesOfClass( - EndCrystal.class, - new AABB(anchor, anchor).inflate(8.0), - EndCrystal::isAlive - ); - EndCrystal closestNearAnchor = nearestCrystalTo(anchor, nearAnchor); - if (closestNearAnchor != null) { - return closestNearAnchor; - } - - List aroundPortal = level.getEntitiesOfClass( - EndCrystal.class, - new AABB(center, center).inflate(CRYSTAL_SEARCH_RADIUS), - EndCrystal::isAlive - ); - return nearestCrystalTo(anchor, aroundPortal); - } - - private EndCrystal nearestCrystalTo(Vec3 pos, List crystals) { - EndCrystal best = null; - double bestDistance = Double.MAX_VALUE; - for (EndCrystal candidate : crystals) { - double d = candidate.position().distanceToSqr(pos); - if (d < bestDistance) { - bestDistance = d; - best = candidate; - } - } - return best; - } - private int tickEmitters(ServerLevel level, Vec3 center) { int emitted = 0; emitted += tickPillarCrafters(level); @@ -435,63 +316,4 @@ private double randomBetween(double min, double max) { return lo + random.nextDouble() * (hi - lo); } - private record PendingPillarPulse(long triggerTick, UUID crystalId) { - } - - private static final class PillarCrafter { - private static final int CRAFT_INTERVAL = 15; - private static final int MAX_TICKS = 500; - - private final Vec3 start; - private Vec3 target; - private final UUID crystalId; - private int tick; - - private PillarCrafter(Vec3 start, Vec3 target, UUID crystalId) { - this.start = start; - this.target = target; - this.crystalId = crystalId; - } - - private Vec3 start() { - return start; - } - - private boolean shouldCraftNow() { - return tick % CRAFT_INTERVAL == 0; - } - - private void advanceTick() { - tick++; - } - - private boolean expired() { - return tick > MAX_TICKS; - } - - private boolean shouldCancel(ServerLevel level, EndRespawnPhase phase) { - if (phase == EndRespawnPhase.BEFORE_END_WAITING || phase == EndRespawnPhase.END) { - return true; - } - if (crystalId == null) { - return true; - } - net.minecraft.world.entity.Entity entity = level.getEntity(crystalId); - if (!(entity instanceof EndCrystal crystal) || !crystal.isAlive()) { - return true; - } - return crystal.getBeamTarget() == null; - } - - private Vec3 resolveTarget(ServerLevel level) { - if (crystalId == null) { - return target; - } - net.minecraft.world.entity.Entity entity = level.getEntity(crystalId); - if (entity instanceof EndCrystal crystal && crystal.isAlive()) { - target = crystal.position().add(0.0, 1.7, 0.0); - } - return target; - } - } } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndDragonFightHelper.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndDragonFightHelper.java index 16ec8e7..74dcb2b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndDragonFightHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndDragonFightHelper.java @@ -3,19 +3,20 @@ package com.reiasu.reiparticleskill.end.respawn; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.boss.enderdragon.EndCrystal; import net.minecraft.world.level.dimension.end.EndDragonFight; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Collection; +import java.util.List; import java.util.Optional; +import java.util.UUID; -/** - * Utility methods for reading dragon-respawn state from {@link EndDragonFight} - * via reflection (Forge 1.20.x mappings). - */ public final class EndDragonFightHelper { private EndDragonFightHelper() { @@ -160,4 +161,44 @@ private static Integer readIntField(Object target, String... names) { } return null; } + + // ---- Crystal resolution ---- + + static EndCrystal resolvePulseCrystal(ServerLevel level, Vec3 center, Vec3 anchor, + UUID preferredCrystalId, double searchRadius) { + if (preferredCrystalId != null) { + net.minecraft.world.entity.Entity entity = level.getEntity(preferredCrystalId); + if (entity instanceof EndCrystal preferred && preferred.isAlive()) { + return preferred; + } + } + java.util.List nearAnchor = level.getEntitiesOfClass( + EndCrystal.class, + new AABB(anchor, anchor).inflate(8.0), + EndCrystal::isAlive + ); + EndCrystal closest = nearestCrystalTo(anchor, nearAnchor); + if (closest != null) { + return closest; + } + java.util.List aroundPortal = level.getEntitiesOfClass( + EndCrystal.class, + new AABB(center, center).inflate(searchRadius), + EndCrystal::isAlive + ); + return nearestCrystalTo(anchor, aroundPortal); + } + + static EndCrystal nearestCrystalTo(Vec3 pos, java.util.List crystals) { + EndCrystal best = null; + double bestDistance = Double.MAX_VALUE; + for (EndCrystal candidate : crystals) { + double d = candidate.position().distanceToSqr(pos); + if (d < bestDistance) { + bestDistance = d; + best = candidate; + } + } + return best; + } } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnWatcher.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnWatcher.java index b3c4f3f..aaa8668 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnWatcher.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnWatcher.java @@ -22,6 +22,10 @@ public final class EndRespawnWatcher { private EndRespawnWatcher() { } + public static void clearTrackers() { + SYNTHETIC_TRACKERS.clear(); + } + public static void tickServer(MinecraftServer server, EndRespawnStateBridge bridge, Logger logger) { boolean foundRespawning = false; @@ -107,7 +111,7 @@ private static int resolveCrystalCount(EndDragonFight fight, ServerLevel level, return Math.max(fromFight, fromPortalArea); } - // Synthetic phase tick thresholds — aligned with Fabric mixin timing. + // Synthetic phase tick thresholds --” aligned with Fabric mixin timing. // Extracted to constants so they can be tuned or tested independently. static final long PHASE_START_END = 150L; static final long PHASE_SUMMON_PILLARS_END = 650L; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarCrafter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarCrafter.java new file mode 100644 index 0000000..a3328c3 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarCrafter.java @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticleskill.end.respawn; + +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.boss.enderdragon.EndCrystal; +import net.minecraft.world.phys.Vec3; + +import java.util.UUID; + +final class PillarCrafter { + static final int CRAFT_INTERVAL = 15; + static final int MAX_TICKS = 500; + + private final Vec3 start; + private Vec3 target; + private final UUID crystalId; + private int tick; + + PillarCrafter(Vec3 start, Vec3 target, UUID crystalId) { + this.start = start; + this.target = target; + this.crystalId = crystalId; + } + + Vec3 start() { + return start; + } + + boolean shouldCraftNow() { + return tick % CRAFT_INTERVAL == 0; + } + + void advanceTick() { + tick++; + } + + boolean expired() { + return tick > MAX_TICKS; + } + + boolean shouldCancel(ServerLevel level, EndRespawnPhase phase) { + if (phase == EndRespawnPhase.BEFORE_END_WAITING || phase == EndRespawnPhase.END) { + return true; + } + if (crystalId == null) { + return true; + } + net.minecraft.world.entity.Entity entity = level.getEntity(crystalId); + if (!(entity instanceof EndCrystal crystal) || !crystal.isAlive()) { + return true; + } + return crystal.getBeamTarget() == null; + } + + Vec3 resolveTarget(ServerLevel level) { + if (crystalId == null) { + return target; + } + net.minecraft.world.entity.Entity entity = level.getEntity(crystalId); + if (entity instanceof EndCrystal crystal && crystal.isAlive()) { + target = crystal.position().add(0.0, 1.7, 0.0); + } + return target; + } +} diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarPulseScheduler.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarPulseScheduler.java new file mode 100644 index 0000000..10892c8 --- /dev/null +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarPulseScheduler.java @@ -0,0 +1,109 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// Copyright (C) 2025 Reiasu +package com.reiasu.reiparticleskill.end.respawn; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.boss.enderdragon.EndCrystal; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +final class PillarPulseScheduler { + private static final int PILLAR_EVENT_DELAY_TICKS = 39; + private static final double CRYSTAL_SEARCH_RADIUS = 96.0; + private static final double PILLAR_RING_RADIUS = 56.0; + private static final double PILLAR_RING_Y_OFFSET = 80.0; + + private final Map crystalBeamTargets = new HashMap<>(); + private final Map pendingPulses = new HashMap<>(); + private int pulseIndex; + private long lastPulseTick = Long.MIN_VALUE; + + record PulseResult(Vec3 pillarCenter, UUID preferredCrystalId) {} + + List tick(ServerLevel level, Vec3 center, long phaseTick) { + List crystals = level.getEntitiesOfClass( + EndCrystal.class, + new AABB(center, center).inflate(CRYSTAL_SEARCH_RADIUS), + EndCrystal::isAlive + ); + Set seen = new HashSet<>(); + for (EndCrystal crystal : crystals) { + UUID uuid = crystal.getUUID(); + seen.add(uuid); + BlockPos beam = crystal.getBeamTarget(); + if (beam == null) { + continue; + } + BlockPos prev = crystalBeamTargets.put(uuid, beam.immutable()); + if (prev == null || !prev.equals(beam)) { + pendingPulses.put(beam.immutable(), + new PendingPillarPulse(phaseTick + PILLAR_EVENT_DELAY_TICKS, uuid)); + } + } + crystalBeamTargets.keySet().removeIf(uuid -> !seen.contains(uuid)); + + List results = new java.util.ArrayList<>(); + boolean fired = false; + Iterator> it = pendingPulses.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry entry = it.next(); + PendingPillarPulse pulse = entry.getValue(); + if (pulse.triggerTick() > phaseTick) { + continue; + } + results.add(new PulseResult(Vec3.atCenterOf(entry.getKey()), pulse.crystalId())); + it.remove(); + fired = true; + } + if (fired) { + lastPulseTick = phaseTick; + return results; + } + + // Fallback: fire once when no beam targets are visible yet + if (!pendingPulses.isEmpty() || !crystalBeamTargets.isEmpty() + || lastPulseTick != Long.MIN_VALUE) { + return results; + } + Vec3 fallback = chooseFallbackTarget(crystals, center); + results.add(new PulseResult(fallback, null)); + lastPulseTick = phaseTick; + return results; + } + + int nextPulseIndex() { + return pulseIndex++; + } + + void clear() { + crystalBeamTargets.clear(); + pendingPulses.clear(); + pulseIndex = 0; + lastPulseTick = Long.MIN_VALUE; + } + + private Vec3 chooseFallbackTarget(List crystals, Vec3 center) { + if (!crystals.isEmpty()) { + EndCrystal crystal = crystals.get(Math.floorMod(pulseIndex, crystals.size())); + BlockPos beam = crystal.getBeamTarget(); + if (beam != null) { + return Vec3.atCenterOf(beam); + } + return crystal.position(); + } + double angle = (Math.PI * 2.0 * (pulseIndex % 10)) / 10.0; + return center.add(Math.cos(angle) * PILLAR_RING_RADIUS, PILLAR_RING_Y_OFFSET, + Math.sin(angle) * PILLAR_RING_RADIUS); + } + + private record PendingPillarPulse(long triggerTick, UUID crystalId) {} +} diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/CollectEnderPowerEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/CollectEnderPowerEmitter.java index 3f13034..aa270a3 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/CollectEnderPowerEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/CollectEnderPowerEmitter.java @@ -70,15 +70,7 @@ public CollectEnderPowerEmitter setTargetOffset(Vec3 targetOffset) { return this; } - /** - * Logarithmic spiral inward trajectory with angular momentum conservation. - * Each particle orbits the target on a tightening spiral path: - * r(t) = r0 · e^(-λ·t) - * θ(t) = θ0 + ω0·r0/r(t) · t (angular momentum ∝ r·ω = const) - * - * @author Reiasu - */ - @Override + @Override protected int emit(ServerLevel level, Vec3 center, int tick) { Vec3 origin = center.add(originOffset); Vec3 target = center.add(targetOffset); @@ -109,7 +101,7 @@ private int tickSpiral(ServerLevel level, Vec3 target) { double decay = Math.exp(-p.lambda * p.age); double currentR = p.initialRadius * decay; - // Angular momentum conservation: ω ∝ 1/r² → angle accelerates as r shrinks + // Angular momentum conservation: ω --ˆ 1/r--² --†’ angle accelerates as r shrinks double angularProgress = p.omega0 * p.initialRadius * p.initialRadius * (1.0 / Math.max(0.5, currentR * currentR)); double theta = p.initialTheta + angularProgress * p.age * 0.05; @@ -197,7 +189,7 @@ private int spawnSpiral(Vec3 origin, Vec3 target) { double initR = Math.sqrt(dx * dx + dz * dz); double initTheta = Math.atan2(dz, dx); - // Spiral decay rate: λ controls how fast particles converge + // Spiral decay rate: λ controls how fast particles converge double lambda = randomBetween(0.04, 0.09); // Initial angular velocity: higher = more orbits double omega = randomBetween(1.5, 4.0) * (random.nextBoolean() ? 1.0 : -1.0); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndBeamExplosionEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndBeamExplosionEmitter.java index 46fa6bd..baacad6 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndBeamExplosionEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndBeamExplosionEmitter.java @@ -91,15 +91,7 @@ public EndBeamExplosionEmitter setAnchorOffset(Vec3 anchorOffset) { return this; } - /** - * Fibonacci sphere (golden angle) burst distribution with gravity pull-back. - * Instead of a flat ring burst, particles are distributed on a sphere using - * the golden angle (π(3-√5)) for uniform coverage. After the initial burst, - * gravity pulls particles downward creating an arching firework effect. - * - * @author Reiasu - */ - @Override + @Override protected int emit(ServerLevel level, Vec3 center, int tick) { Vec3 origin = center.add(anchorOffset); int emitted = 0; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/PillarFourierBeamEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/PillarFourierBeamEmitter.java index 72f1e00..5b4da50 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/PillarFourierBeamEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/PillarFourierBeamEmitter.java @@ -10,16 +10,6 @@ import net.minecraft.world.phys.Vec3; import org.joml.Vector3f; -/** - * Fourier-curve light beam that erupts upward from an obsidian pillar - * during the dragon respawn finale. The beam cross-section traces a - * multi-frequency rose curve that rotates and expands as it rises. - *

- * Cross-section: r(θ) = A·cos(3θ) + B·cos(5θ) + C·sin(2θ) - * The beam sweeps upward over time, leaving a fading trail. - * - * @author Reiasu - */ public final class PillarFourierBeamEmitter extends TimedRespawnEmitter { private static final Vector3f BEAM_COLOR = new Vector3f(210f / 255f, 80f / 255f, 1.0f); private static final Vector3f BRIGHT_COLOR = new Vector3f(240f / 255f, 160f / 255f, 1.0f); @@ -100,7 +90,7 @@ private int emitBeamBody(ServerLevel level, int tick, double beamTop) { // Rotation accelerates with height double localRot = rotation + heightFraction * TAU * 0.5; - // Fourier cross-section: r(θ) = A·cos(3θ) + B·cos(5θ) + C·sin(2θ) + // Fourier cross-section: r(θ) = A--·cos(3θ) + B--·cos(5θ) + C--·sin(2θ) float size = Mth.clamp(3.5f * alpha, 1.0f, 4.0f); DustParticleOptions dust = new DustParticleOptions(BEAM_COLOR, size); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/ShockwaveWallEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/ShockwaveWallEmitter.java index f0f48b1..48a88e1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/ShockwaveWallEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/ShockwaveWallEmitter.java @@ -10,19 +10,6 @@ import net.minecraft.world.phys.Vec3; import org.joml.Vector3f; -/** - * Expanding shockwave wall that erupts outward from the center during - * the dragon respawn finale. The wall is a tall cylinder of particles - * that expands rapidly, creating a dramatic visual impact. - *

- * The wall has two layers: - *

    - *
  • Primary ring: dense dust particles forming the wall face
  • - *
  • Trailing wisps: enchant particles left behind as the wall passes
  • - *
- * - * @author Reiasu - */ public final class ShockwaveWallEmitter extends TimedRespawnEmitter { private static final Vector3f WALL_COLOR = new Vector3f(180f / 255f, 60f / 255f, 1.0f); private static final Vector3f BRIGHT_COLOR = new Vector3f(230f / 255f, 140f / 255f, 1.0f); @@ -47,8 +34,6 @@ protected int emit(ServerLevel level, Vec3 center, int tick) { // Wall intensity fades as it expands float intensity = Mth.clamp(1.0f - (float) (radius / MAX_RADIUS), 0.1f, 1.0f); double wallThickness = 1.5 + radius * 0.02; - - // ---- Primary wall ring at multiple heights ---- for (int h = 0; h < HEIGHT_SLICES; h++) { double y = (h / (double) HEIGHT_SLICES) * WALL_HEIGHT; // Sinusoidal height envelope: thicker in the middle @@ -70,8 +55,6 @@ protected int emit(ServerLevel level, Vec3 center, int tick) { emitted += 3; } } - - // ---- Ground-level leading edge: bright ring ---- DustParticleOptions edgeDust = new DustParticleOptions(BRIGHT_COLOR, 4.0f); for (int i = 0; i < RING_POINTS; i++) { double angle = TAU * i / (double) RING_POINTS; @@ -82,8 +65,6 @@ protected int emit(ServerLevel level, Vec3 center, int tick) { 3, 0.2, 0.12, 0.2, 0.01); emitted += 3; } - - // ---- Trailing enchant wisps (only first 60% of expansion) ---- if (radius < MAX_RADIUS * 0.6) { double trailRadius = radius * 0.85; int trailPoints = RING_POINTS / 2; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCenterEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCenterEmitter.java index 2e440a8..5ad1559 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCenterEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCenterEmitter.java @@ -14,11 +14,6 @@ import net.minecraft.world.phys.Vec3; import org.joml.Vector3f; -/** - * Client-rendered center geometric pattern emitter. - * Rhodonea curve + dual pentagram + Lissajous figures + pulsing ring. - * Server syncs params only; client generates particles locally. - */ @ReiAutoRegister public final class ClientCenterEmitter extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "client_center"); @@ -58,6 +53,10 @@ protected void emitTick() { } private void renderCenter(Level level, Vec3 center, int tick) { + double cx = center.x; + double cy = center.y + yOffset; + double cz = center.z; + double scale = easeScale(tick); double breath = 1.0 + 0.15 * Math.sin(tick * 0.08); double rotA = tick * 0.008; @@ -68,44 +67,65 @@ private void renderCenter(Level level, Vec3 center, int tick) { DustParticleOptions dustSm = new DustParticleOptions(MAIN_COLOR, 2.2f); DustParticleOptions dustLg = new DustParticleOptions(MAIN_COLOR, 4.0f); + // Precompute sines/cosines + double cosRotA = Math.cos(rotA); + double sinRotA = Math.sin(rotA); + // Layer 1: Rhodonea curve r = cos(5/3 * theta) for (int i = 0; i < LAYER1_ROSE_POINTS; i++) { double theta = 3.0 * TAU * i / (double) LAYER1_ROSE_POINTS; double r = Math.cos(5.0 / 3.0 * theta) * 42.0 * scale * breath; double rx = r * Math.cos(theta); double rz = r * Math.sin(theta); - Vec3 rel = rotateY(new Vec3(rx, 0.0, rz), rotA).add(0.0, yOffset, 0.0); - addDust(level, center, rel, dustMed); + + // rotateY + double relX = rx * cosRotA - rz * sinRotA; + double relZ = rx * sinRotA + rz * cosRotA; + + addDust(level, cx + relX, cy, cz + relZ, dustMed); } // Layer 1: Dual pentagram - emitStar(level, center, yOffset, 5, 48.0 * scale * breath, 0.0, LAYER1_STAR_POINTS, rotA, dustMed); - emitStar(level, center, yOffset, 5, 36.0 * scale * breath, Math.PI / 5.0, LAYER1_STAR_POINTS, rotA, dustMed); + emitStar(level, cx, cy, cz, 5, 48.0 * scale * breath, 0.0, LAYER1_STAR_POINTS, cosRotA, sinRotA, dustMed); + emitStar(level, cx, cy, cz, 5, 36.0 * scale * breath, Math.PI / 5.0, LAYER1_STAR_POINTS, cosRotA, sinRotA, dustMed); // Layer 1: Breathing inner ring double ringR = 28.0 * scale * breath; for (int i = 0; i < LAYER1_RING_POINTS; i++) { double a = rotA + TAU * i / (double) LAYER1_RING_POINTS; double wobble = 1.0 + 0.12 * Math.sin(a * 6.0 + tick * 0.1); - Vec3 rel = new Vec3(Math.cos(a) * ringR * wobble, yOffset, Math.sin(a) * ringR * wobble); - addDust(level, center, rel, dustMed); + double relX = Math.cos(a) * ringR * wobble; + double relZ = Math.sin(a) * ringR * wobble; + addDust(level, cx + relX, cy, cz + relZ, dustMed); if (i % 3 == 0) { - addEnchant(level, center, rel); + addEnchant(level, cx + relX, cy, cz + relZ); } } // Layer 2: Three Lissajous figures + double cosRotB = Math.cos(rotB); + double sinRotB = Math.sin(rotB); for (int ring = 0; ring < LAYER2_REPEAT; ring++) { double pitch = (TAU / 9.0) * ring; + double cosPitch = Math.cos(pitch); + double sinPitch = Math.sin(pitch); double phase = ring * Math.PI / 3.0; for (int i = 0; i < LAYER2_LISSAJOUS_POINTS; i++) { double t = TAU * i / (double) LAYER2_LISSAJOUS_POINTS; double lx = Math.sin(3.0 * t + Math.PI / 4.0 + phase) * 14.0 * scale; double lz = Math.sin(4.0 * t) * 14.0 * scale; - Vec3 rel = new Vec3(lx, 0.0, lz); - rel = rotateX(rel, pitch); - rel = rotateY(rel, rotB).add(0.0, yOffset, 0.0); - addDust(level, center, rel, dustSm); + + // rotateX + double px = lx; + double pz = lz * cosPitch; + double py = lz * sinPitch; + + // rotateY + double relX = px * cosRotB - pz * sinRotB; + double relZ = px * sinRotB + pz * cosRotB; + double relY = py; + + addDust(level, cx + relX, cy + relY, cz + relZ, dustSm); } } @@ -114,17 +134,18 @@ private void renderCenter(Level level, Vec3 center, int tick) { for (int i = 0; i < LAYER3_RING_POINTS; i++) { double a = rotC + TAU * i / (double) LAYER3_RING_POINTS; double wobble = 1.0 + 0.08 * Math.sin(a * 5.0 - tick * 0.06); - Vec3 rel = new Vec3(Math.cos(a) * outerR * wobble, yOffset, Math.sin(a) * outerR * wobble); - addDust(level, center, rel, dustLg); + double relX = Math.cos(a) * outerR * wobble; + double relZ = Math.sin(a) * outerR * wobble; + addDust(level, cx + relX, cy, cz + relZ, dustLg); if (i % 2 == 0) { - addEnchant(level, center, rel); + addEnchant(level, cx + relX, cy, cz + relZ); } } } - private void emitStar(Level level, Vec3 center, double yOff, + private void emitStar(Level level, double cx, double cy, double cz, int points, double radius, double angleOffset, - int samples, double rotY, DustParticleOptions dust) { + int samples, double cosRot, double sinRot, DustParticleOptions dust) { int skip = 2; for (int i = 0; i < samples; i++) { double u = (i / (double) samples) * points; @@ -134,38 +155,26 @@ private void emitStar(Level level, Vec3 center, double yOff, int v1 = ((seg + 1) * skip) % points; double a0 = angleOffset + TAU * v0 / (double) points; double a1 = angleOffset + TAU * v1 / (double) points; - double x = Math.cos(a0) * radius + (Math.cos(a1) - Math.cos(a0)) * radius * frac; - double z = Math.sin(a0) * radius + (Math.sin(a1) - Math.sin(a0)) * radius * frac; - Vec3 rel = rotateY(new Vec3(x, 0.0, z), rotY).add(0.0, yOff, 0.0); - addDust(level, center, rel, dust); + double rx = Math.cos(a0) * radius + (Math.cos(a1) - Math.cos(a0)) * radius * frac; + double rz = Math.sin(a0) * radius + (Math.sin(a1) - Math.sin(a0)) * radius * frac; + + double relX = rx * cosRot - rz * sinRot; + double relZ = rx * sinRot + rz * cosRot; + + addDust(level, cx + relX, cy, cz + relZ, dust); } } - private void addDust(Level level, Vec3 center, Vec3 rel, DustParticleOptions dust) { - ClientParticleHelper.addForce(level, dust, - center.x + rel.x, center.y + rel.y, center.z + rel.z, - 3, 0.2, 0.1, 0.2, 0.015); + private void addDust(Level level, double x, double y, double z, DustParticleOptions dust) { + ClientParticleHelper.addForce(level, dust, x, y, z, 3, 0.2, 0.1, 0.2, 0.015); } - private void addEnchant(Level level, Vec3 center, Vec3 rel) { - ClientParticleHelper.addForce(level, ParticleTypes.ENCHANT, - center.x + rel.x, center.y + rel.y, center.z + rel.z, + private void addEnchant(Level level, double x, double y, double z) { + ClientParticleHelper.addForce(level, ParticleTypes.ENCHANT, x, y, z, 0, random.nextGaussian() * 0.02, random.nextGaussian() * 0.02, random.nextGaussian() * 0.02, 1.0); } - private Vec3 rotateX(Vec3 p, double angle) { - double cos = Math.cos(angle); - double sin = Math.sin(angle); - return new Vec3(p.x, p.y * cos - p.z * sin, p.y * sin + p.z * cos); - } - - private Vec3 rotateY(Vec3 p, double angle) { - double cos = Math.cos(angle); - double sin = Math.sin(angle); - return new Vec3(p.x * cos - p.z * sin, p.y, p.x * sin + p.z * cos); - } - private double easeScale(int tick) { if (tick <= 0) return 0.01; if (tick >= SCALE_TICKS) return 1.0; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCloudRingEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCloudRingEmitter.java index 49c1429..1bfe061 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCloudRingEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCloudRingEmitter.java @@ -13,10 +13,6 @@ import net.minecraft.world.phys.Vec3; import org.joml.Vector3f; -/** - * Client-rendered rotating cloud ring emitter. - * Server syncs params only; client generates particles locally. - */ @ReiAutoRegister public final class ClientCloudRingEmitter extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "client_cloud_ring"); @@ -66,6 +62,10 @@ protected void emitTick() { } private void renderCloud(Level level, Vec3 center, int tick) { + double cx = center.x; + double cy = center.y; + double cz = center.z; + int cMin = Math.max(1, countMin); int cMax = Math.max(cMin + 1, countMax); int count = random.nextInt(cMin, cMax); @@ -81,7 +81,7 @@ private void renderCloud(Level level, Vec3 center, int tick) { double wavePhase = tick * 0.12; float dustSize = (float) Math.max(0.4, Math.min(4.0, - randomBetween(minSize, maxSize) * scale * 2.5)); + randRange(minSize, maxSize) * scale * 2.5)); DustParticleOptions dust = new DustParticleOptions(MAIN_COLOR, dustSize); DustParticleOptions dustLg = new DustParticleOptions(MAIN_COLOR, Math.min(4.0f, dustSize * 1.5f)); @@ -92,14 +92,19 @@ private void renderCloud(Level level, Vec3 center, int tick) { double localR = r * radialWobble; double waveY = waveAmplitude * Math.sin(waveLobes * angle - wavePhase); - double jR = disc > 0 ? random.nextDouble() * disc : 0.0; - double jA = random.nextDouble() * TAU; - double px = Math.cos(angle) * localR + Math.cos(jA) * jR; - double pz = Math.sin(angle) * localR + Math.sin(jA) * jR; + double px = Math.cos(angle) * localR; + double pz = Math.sin(angle) * localR; + + if (disc > 0) { + double jR = random.nextDouble() * disc; + double jA = random.nextDouble() * TAU; + px += Math.cos(jA) * jR; + pz += Math.sin(jA) * jR; + } - double wx = center.x + px; - double wy = center.y + yOff + waveY; - double wz = center.z + pz; + double wx = cx + px; + double wy = cy + yOff + waveY; + double wz = cz + pz; double tgx = -Math.sin(angle) * 0.03; double tgz = Math.cos(angle) * 0.03; @@ -114,10 +119,9 @@ private void renderCloud(Level level, Vec3 center, int tick) { } } - private double randomBetween(double min, double max) { - double lo = Math.min(min, max); - double hi = Math.max(min, max); - return (Math.abs(hi - lo) < 1.0E-6) ? lo : lo + random.nextDouble() * (hi - lo); + // FIXME: cloud and enchant share a lot of ring logic, could extract base class + private double randRange(double lo, double hi) { + return lo + random.nextDouble() * (hi - lo); } private double easeScale(int tick) { diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientDustEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientDustEmitter.java index 76822af..8d93dc5 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientDustEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientDustEmitter.java @@ -14,11 +14,7 @@ import net.minecraft.world.phys.Vec3; import org.joml.Vector3f; -/** - * Client-rendered ambient dust emitter. - * Server syncs params only; client generates particles locally via addParticle(). - * Replaces per-particle sendForce() calls — zero particle network packets. - */ +// torus-shaped dust cloud, rendered client-side @ReiAutoRegister public final class ClientDustEmitter extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "client_dust"); @@ -64,6 +60,10 @@ protected void emitTick() { } private void renderDust(Level level, Vec3 center, int tick) { + double cx = center.x; + double cy = center.y + yOffset; + double cz = center.z; + double scale = easeScale(tick); double rotation = tick * rotateSpeed; double majorR = maxRadius * 0.6 * scale; @@ -76,39 +76,46 @@ private void renderDust(Level level, Vec3 center, int tick) { tubeDist = tubeDist * tubeDist * tubeDist; double tubeR = minorR * (0.3 + 0.7 * tubeDist); - double ringX = (majorR + tubeR * Math.cos(poloidalAngle)) * Math.cos(toroidalAngle); - double ringZ = (majorR + tubeR * Math.cos(poloidalAngle)) * Math.sin(toroidalAngle); - double ringY = tubeR * Math.sin(poloidalAngle); + double cosPoloidal = Math.cos(poloidalAngle); + double sinPoloidal = Math.sin(poloidalAngle); + double cosToroidal = Math.cos(toroidalAngle); + double sinToroidal = Math.sin(toroidalAngle); + + double ringX = (majorR + tubeR * cosPoloidal) * cosToroidal; + double ringZ = (majorR + tubeR * cosPoloidal) * sinToroidal; + double ringY = tubeR * sinPoloidal; double particlePhase = random.nextDouble() * 0.3 - 0.15; - double cos = Math.cos(rotation + particlePhase); - double sin = Math.sin(rotation + particlePhase); + double rotPhase = rotation + particlePhase; + double cos = Math.cos(rotPhase); + double sin = Math.sin(rotPhase); + double px = ringX * cos - ringZ * sin; double pz = ringX * sin + ringZ * cos; double tangentX = -Math.sin(toroidalAngle + rotation) * 0.02; double tangentZ = Math.cos(toroidalAngle + rotation) * 0.02; - float size = Mth.clamp((float) randomBetween(sizeMin, sizeMax) * 2.0f, 0.2f, 4.0f); + float size = Mth.clamp((float) rng(sizeMin, sizeMax) * 2.0f, 0.2f, 4.0f); + ClientParticleHelper.addForce(level, new DustParticleOptions(MAIN_COLOR, size), - center.x + px, center.y + yOffset + ringY, center.z + pz, + cx + px, cy + ringY, cz + pz, 3, 0.15 + Math.abs(tangentX), 0.12, 0.15 + Math.abs(tangentZ), 0.02); } } - private double randomBetween(double min, double max) { - double lo = Math.min(min, max); - double hi = Math.max(min, max); - return (Math.abs(hi - lo) < 1.0E-6) ? lo : lo + random.nextDouble() * (hi - lo); + private double rng(double min, double max) { + if (min >= max) return min; + return min + random.nextDouble() * (max - min); } + // TODO: maybe share this with the other emitters private double easeScale(int tick) { - if (tick <= 0) return 0.01; if (tick >= SCALE_TICKS) return 1.0; + if (tick <= 0) return 0.01; double t = tick / (double) SCALE_TICKS; - double inv = 1.0 - t; - return 0.01 + 0.99 * (1.0 - inv * inv * inv * inv * inv); + return 0.01 + 0.99 * (1.0 - Math.pow(1.0 - t, 5)); } @Override diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientEnchantRingEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientEnchantRingEmitter.java index 338ca4e..5ede767 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientEnchantRingEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientEnchantRingEmitter.java @@ -14,10 +14,6 @@ import net.minecraft.world.phys.Vec3; import org.joml.Vector3f; -/** - * Client-rendered enchant sparkle ring emitter. - * Server syncs params only; client generates particles locally. - */ @ReiAutoRegister public final class ClientEnchantRingEmitter extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "client_enchant_ring"); @@ -70,7 +66,8 @@ private void renderEnchant(Level level, Vec3 center, int tick) { int cMin = Math.max(1, countMin); int cMax = Math.max(cMin + 1, countMax); int count = random.nextInt(cMin, cMax); - double scale = easeScale(tick); + double rawT = Math.min(1.0, Math.max(0.0, tick / (double) SCALE_TICKS)); + double scale = rawT < 1.0 ? 0.01 + 0.99 * (1.0 - Math.pow(1.0 - rawT, 5)) : 1.0; double rotation = tick * rotateSpeed; double breath = 1.0 + 0.04 * Math.sin(tick * 0.09); double r = radius * scale * breath; @@ -117,17 +114,7 @@ private void renderEnchant(Level level, Vec3 center, int tick) { } private double randomBetween(double min, double max) { - double lo = Math.min(min, max); - double hi = Math.max(min, max); - return (Math.abs(hi - lo) < 1.0E-6) ? lo : lo + random.nextDouble() * (hi - lo); - } - - private double easeScale(int tick) { - if (tick <= 0) return 0.01; - if (tick >= SCALE_TICKS) return 1.0; - double t = tick / (double) SCALE_TICKS; - double inv = 1.0 - t; - return 0.01 + 0.99 * (1.0 - inv * inv * inv * inv * inv); + return min + random.nextDouble() * Math.max(0, max - min); } @Override diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/BarrageItemEntity.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/BarrageItemEntity.java index 28d6d3f..f0b7f90 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/BarrageItemEntity.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/BarrageItemEntity.java @@ -101,5 +101,5 @@ public void tick() { } } - // getAddEntityPacket removed in 1.21 — NeoForge handles entity spawn packets automatically + // getAddEntityPacket removed in 1.21 --” NeoForge handles entity spawn packets automatically } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/KeyListener.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/KeyListener.java index ca9d489..9b62859 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/KeyListener.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/KeyListener.java @@ -2,8 +2,6 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.listener; -import com.reiasu.reiparticlesapi.annotations.events.EventHandler; -import com.reiasu.reiparticlesapi.annotations.events.EventListener; import com.reiasu.reiparticlesapi.event.events.key.KeyActionEvent; import com.reiasu.reiparticlesapi.event.events.key.KeyActionType; import com.reiasu.reiparticleskill.ReiParticleSkillForge; @@ -17,13 +15,12 @@ import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; import net.neoforged.bus.api.SubscribeEvent; -@EventListener(modId = ReiParticleSkillForge.MOD_ID) @net.neoforged.fml.common.EventBusSubscriber(modid = ReiParticleSkillForge.MOD_ID, bus = net.neoforged.fml.common.EventBusSubscriber.Bus.GAME) public final class KeyListener { private static final int USE_COOLDOWN_TICKS = 16; - @EventHandler - public void onKeyEvent(KeyActionEvent event) { + @SubscribeEvent + public static void onKeyEvent(KeyActionEvent event) { if (event == null || event.getAction() != KeyActionType.SINGLE_CLICK || !event.getServerSide()) { return; } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/mixin/EndCrystalRendererMixin.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/mixin/EndCrystalRendererMixin.java index 15fd66d..4eb7d38 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/mixin/EndCrystalRendererMixin.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/mixin/EndCrystalRendererMixin.java @@ -11,13 +11,6 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -/** - * Suppresses the vanilla End Crystal beam so the mod's custom - * particle effects are not obscured by the bright white beam. - *

- * Uses {@link WrapOperation} (MixinExtras) instead of {@code @Redirect} - * so that multiple mods can safely wrap the same {@code getBeamTarget()} call. - */ @Mixin(EndCrystalRenderer.class) public abstract class EndCrystalRendererMixin { diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/RangeData.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/RangeData.java index cf1fed5..0f2fa2d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/RangeData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/RangeData.java @@ -2,9 +2,5 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles; -/** - * Marker/utility class preserved from the Fabric original. - * The original class was an empty data holder; kept for API compatibility. - */ public final class RangeData { } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectEnderPowerEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectEnderPowerEmitter.java index 6269f78..38d4082 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectEnderPowerEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectEnderPowerEmitter.java @@ -23,12 +23,6 @@ import java.util.List; import java.util.UUID; -/** - * Emitter that collects ender-power particles toward a target position. - * Particles spawn outward and converge on the target with alpha fade, - * rotation, and velocity damping near the destination. - * Server-side port of the Fabric original. - */ public final class CollectEnderPowerEmitter extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "collect_ender_power"); @@ -157,7 +151,7 @@ protected void emitTick() { } else { progress = 1.0f; } - float alpha = GraphMathHelper.lerp(progress, 0.0f, 1.0f); + float alpha = Mth.lerp(progress, 0.0f, 1.0f); if (alpha < 0.02f) continue; if (p.sign == 0) { diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectPillarsEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectPillarsEmitters.java index c00369a..b0330d4 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectPillarsEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectPillarsEmitters.java @@ -25,12 +25,6 @@ import java.util.List; import java.util.UUID; -/** - * Emitter that spawns particles on a discrete circle and moves them - * upward toward the emitter center, simulating pillar collection. - * Also spawns vertical pillar lines during the first few ticks. - * Server-side port of the Fabric original. - */ @ReiAutoRegister public final class CollectPillarsEmitters extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "collect_pillars"); @@ -193,7 +187,7 @@ protected void emitTick() { ? p.maxAge - p.age : Math.min(p.age, 20); float ageProgress = Mth.clamp((float) ageForAlpha / 20.0f, 0.0f, 1.0f); - float alpha = GraphMathHelper.lerp(ageProgress, 0.0f, 1.0f); + float alpha = Mth.lerp(ageProgress, 0.0f, 1.0f); if (alpha < 0.02f) continue; if (p.sign == 0) { @@ -205,9 +199,9 @@ protected void emitTick() { ? Mth.clamp(hLen / p.genLength, 0.0, 1.0) : 0.0; - double lerpVertical = GraphMathHelper.lerp( + double lerpVertical = Mth.lerp( (float) progress, verticalMaxSpeedMultiplier, verticalMinSpeedMultiplier); - double lerpHorizontal = GraphMathHelper.lerp( + double lerpHorizontal = Mth.lerp( (float) progress, horizontalMinSpeedMultiplier, horizontalMaxSpeedMultiplier); Vec3 dir = rel.normalize(); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndBeamExplosionEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndBeamExplosionEmitter.java index 6852747..73d1dd7 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndBeamExplosionEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndBeamExplosionEmitter.java @@ -24,10 +24,6 @@ import java.util.List; import java.util.UUID; -/** - * End beam explosion emitter that spawns a disc wave of particles - * expanding outward with velocity drag. Server-side port of the Fabric original. - */ @ReiAutoRegister public final class EndBeamExplosionEmitter extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "end_beam_explosion"); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndCrystalEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndCrystalEmitters.java index 8220c6a..fb6890f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndCrystalEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndCrystalEmitters.java @@ -22,11 +22,6 @@ import java.util.List; import java.util.UUID; -/** - * End crystal emitter that travels from a summon position toward a target, - * spawning particles in a rotating ring whose radius expands and contracts - * based on distance progress. Server-side port of the Fabric original. - */ @ReiAutoRegister public final class EndCrystalEmitters extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "end_crystal"); @@ -124,11 +119,7 @@ public static EndCrystalEmitters decode(FriendlyByteBuf buf) { return emitter; } - /** - * Computes the current ring radius based on distance progress. - * Radius peaks at 50% travel, shrinks to zero at endpoints. - */ - public double getCurrentRadius() { + public double getCurrentRadius() { double originalDistance = summonPos.distanceTo(target); if (originalDistance < 0.01) return 0.0; double distance = position().distanceTo(target); @@ -136,7 +127,7 @@ public double getCurrentRadius() { double progress = 1.0 - distance / originalDistance; double stepTo = Math.abs(progress - 0.5) * 2.0; - return GraphMathHelper.lerp((float) stepTo, maxRadius, 0.0); + return Mth.lerp((float) stepTo, maxRadius, 0.0); } @Override diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndLightBeamEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndLightBeamEmitter.java index 604c248..16c2bda 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndLightBeamEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndLightBeamEmitter.java @@ -17,11 +17,6 @@ import java.util.UUID; -/** - * End light beam emitter that travels from source toward a target position, - * spawning a trail of particles. Used in end respawn sequences. - * Server-side port of the Fabric original. - */ @ReiAutoRegister public final class EndLightBeamEmitter extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "end_light_beam"); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/SummonExplosionEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/SummonExplosionEmitter.java index c145d0f..114828a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/SummonExplosionEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/SummonExplosionEmitter.java @@ -12,10 +12,6 @@ import java.util.UUID; -/** - * Summon explosion emitter stub. The Fabric original is an empty placeholder - * registered via ReiAutoRegister. Preserved for API compatibility. - */ public final class SummonExplosionEmitter extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "summon_explosion"); @@ -49,6 +45,6 @@ public static SummonExplosionEmitter decode(FriendlyByteBuf buf) { @Override protected void emitTick() { - // Stub — no emission logic in the original + // Stub --” no emission logic in the original } } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/LightEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/LightEmitter.java index 6bb1b67..d1fc4d1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/LightEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/LightEmitter.java @@ -20,10 +20,6 @@ import java.util.List; import java.util.UUID; -/** - * Lightning-attenuation emitter that spawns branching particle bolts - * outward from the emitter origin, matching the Fabric original's visual intent. - */ @ReiAutoRegister public final class LightEmitter extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "light"); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordAuraEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordAuraEmitters.java index 954e217..85b9c00 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordAuraEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordAuraEmitters.java @@ -20,10 +20,6 @@ import java.util.List; import java.util.UUID; -/** - * Sword aura emitter producing main arc particles and sub trail particles - * that follow the sword swing direction, matching the Fabric original. - */ @ReiAutoRegister public final class SwordAuraEmitters extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "sword_aura"); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordExplosionEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordExplosionEmitters.java index d2716ae..8da5c93 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordExplosionEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordExplosionEmitters.java @@ -20,11 +20,6 @@ import java.util.List; import java.util.UUID; -/** - * Sword explosion emitter producing three layers of particles: - * flash (sign=0), spark (sign=1), and ring (sign=2). - * Matches the visual intent of the Fabric original. - */ @ReiAutoRegister public final class SwordExplosionEmitters extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "sword_explosion"); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationEmitters.java index 55299d0..d2967a0 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationEmitters.java @@ -20,10 +20,6 @@ import java.util.List; import java.util.UUID; -/** - * Sword formation emitter producing vortex and outer spread particles - * around a formation center, matching the Fabric original. - */ @ReiAutoRegister public final class SwordFormationEmitters extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "sword_formation"); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationExplosionEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationExplosionEmitter.java index 7983e0b..20eaa68 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationExplosionEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationExplosionEmitter.java @@ -20,10 +20,6 @@ import java.util.List; import java.util.UUID; -/** - * Sword formation explosion emitter producing sphere-wave and disc-wave particles - * at a formation collapse point, matching the Fabric original. - */ @ReiAutoRegister public final class SwordFormationExplosionEmitter extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "sword_formation_explosion"); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationWaveEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationWaveEmitter.java index 8d16ab4..75cafb3 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationWaveEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationWaveEmitter.java @@ -20,10 +20,6 @@ import java.util.List; import java.util.UUID; -/** - * Sword formation wave emitter producing spiral radian-based particles - * that expand outward from the formation center, matching the Fabric original. - */ @ReiAutoRegister public final class SwordFormationWaveEmitter extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "sword_formation_wave"); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunBeamEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunBeamEmitter.java index 20b45e4..28d9a05 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunBeamEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunBeamEmitter.java @@ -22,10 +22,6 @@ import java.util.List; import java.util.UUID; -/** - * Railgun beam emitter that spawns a long vertical beam of particles - * with scattered disc particles at the base, matching the Fabric original. - */ @ReiAutoRegister public final class RailgunBeamEmitter extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "railgun_beam"); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunExplosionEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunExplosionEmitter.java index a127903..f36d1ec 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunExplosionEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunExplosionEmitter.java @@ -20,10 +20,6 @@ import java.util.List; import java.util.UUID; -/** - * Railgun explosion emitter producing a disc wave and sphere ball of particles, - * matching the Fabric original's visual intent. - */ @ReiAutoRegister public final class RailgunExplosionEmitter extends AutoParticleEmitters { public static final ResourceLocation CODEC_ID = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "railgun_explosion"); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/Formation.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/Formation.java index aeead67..9ef94b6 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/Formation.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/Formation.java @@ -17,10 +17,6 @@ import java.util.List; import java.util.Map; -/** - * Static sword-shaped formation composition. - * Renders the sword outline as defined in the Fabric original's Formation class. - */ public final class Formation extends AutoParticleComposition { private static final DustParticleOptions COLOR = new DustParticleOptions(new Vector3f(0.95f, 0.82f, 0.35f), 0.7f); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunBeamStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunBeamStyle.java index 4c09901..e823004 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunBeamStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunBeamStyle.java @@ -27,11 +27,6 @@ import java.util.Map; import java.util.UUID; -/** - * Railgun beam style that renders a long beam of particles along a direction, - * with hexagonal vertex anchors and a rotating central column. - * Server-side port of the Fabric original. - */ @ReiAutoRegister public final class RailgunBeamStyle extends ParticleGroupStyle { public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "railgun_beam_style"); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunChargingRingStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunChargingRingStyle.java index 394d8b9..8c7fc5f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunChargingRingStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunChargingRingStyle.java @@ -27,10 +27,6 @@ import java.util.Map; import java.util.UUID; -/** - * Railgun charging ring style that renders concentric rotating rings - * with a polygon glyph overlay, matching the Fabric original. - */ @ReiAutoRegister public final class RailgunChargingRingStyle extends ParticleGroupStyle { public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "railgun_charging_ring_style"); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndCrystalStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndCrystalStyle.java index e33420c..9439368 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndCrystalStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndCrystalStyle.java @@ -27,11 +27,6 @@ import java.util.Map; import java.util.UUID; -/** - * End crystal particle style rendering a rotating circle with Fourier-series glyph overlay. - * Color: purple (210, 80, 255). Supports scale-in/out and status-driven removal. - * Server-side port of the Fabric original. - */ @ReiAutoRegister public final class EndCrystalStyle extends ParticleGroupStyle { public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "end_crystal_style"); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndDustStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndDustStyle.java index 3a33352..25a0b04 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndDustStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndDustStyle.java @@ -21,16 +21,13 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import org.joml.Vector3f; +import net.minecraft.util.Mth; import java.util.HashMap; import java.util.Map; import java.util.UUID; +import net.minecraft.util.Mth; -/** - * End dust style that renders randomly positioned dust particles within a radius, - * with rotation, status-driven alpha fade, and scale animation. - * Color: purple (210, 80, 255). Server-side port of the Fabric original. - */ @ReiAutoRegister public final class EndDustStyle extends ParticleGroupStyle { public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "end_dust_style"); @@ -114,7 +111,7 @@ public void tick() { // Status handling if (status == 2) { statusTick++; - float fadeAlpha = GraphMathHelper.lerp( + float fadeAlpha = Mth.lerp( 1.0f - (float) statusTick / 10.0f, 0.0f, 1.0f); if (fadeAlpha <= 0.02f || statusTick > 10) { super.remove(); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnCenterStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnCenterStyle.java index 325ab62..f01281c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnCenterStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnCenterStyle.java @@ -27,12 +27,6 @@ import java.util.Map; import java.util.UUID; -/** - * Ender respawn center style that renders concentric Fourier-series glyphs - * and a large outer circle with enchantment particles. - * Features multiple rotating layers with different speeds and scale-in animation. - * Color: purple (210, 80, 255). Server-side port of the Fabric original. - */ @ReiAutoRegister public final class EnderRespawnCenterStyle extends ParticleGroupStyle { public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "ender_respawn_center_style"); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveCloudStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveCloudStyle.java index 1f4a15b..bac657f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveCloudStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveCloudStyle.java @@ -23,17 +23,14 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import org.joml.Vector3f; +import net.minecraft.util.Mth; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; +import net.minecraft.util.Mth; -/** - * Ender respawn wave cloud style that renders cloud-like particle rings - * with Y offset, random angles, rotation, and status-driven alpha fade. - * Color: purple (210, 80, 255). Server-side port of the Fabric original. - */ @ReiAutoRegister public final class EnderRespawnWaveCloudStyle extends ParticleGroupStyle { public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "ender_respawn_wave_cloud_style"); @@ -129,7 +126,7 @@ public void tick() { float alpha = 1.0f; if (status == 2) { statusTick++; - alpha = GraphMathHelper.lerp((float) statusTick / 20.0f, 1.0f, 0.0f); + alpha = Mth.lerp((float) statusTick / 20.0f, 1.0f, 0.0f); if (alpha <= 0.02f || statusTick > 20) { super.remove(); return; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveEnchantStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveEnchantStyle.java index cefcceb..2d1d852 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveEnchantStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveEnchantStyle.java @@ -23,17 +23,14 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import org.joml.Vector3f; +import net.minecraft.util.Mth; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; +import net.minecraft.util.Mth; -/** - * Ender respawn wave enchantment style that renders enchantment-like particle rings - * with Y offset, random angles, rotation, and status-driven alpha fade. - * Color: purple (210, 80, 255). Server-side port of the Fabric original. - */ @ReiAutoRegister public final class EnderRespawnWaveEnchantStyle extends ParticleGroupStyle { public static final ResourceLocation REGISTRY_KEY = ResourceLocation.fromNamespaceAndPath("reiparticleskill", "ender_respawn_wave_enchant_style"); @@ -129,7 +126,7 @@ public void tick() { float alpha = 1.0f; if (status == 2) { statusTick++; - alpha = GraphMathHelper.lerp((float) statusTick / 20.0f, 1.0f, 0.0f); + alpha = Mth.lerp((float) statusTick / 20.0f, 1.0f, 0.0f); if (alpha <= 0.02f || statusTick > 20) { super.remove(); return; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/register/RuntimePortAutoRegistrar.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/register/RuntimePortAutoRegistrar.java index d1c3b9f..c6a328c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/register/RuntimePortAutoRegistrar.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/register/RuntimePortAutoRegistrar.java @@ -20,20 +20,6 @@ import java.util.Collection; import java.util.function.Function; -/** - * Scans for classes annotated with {@link ReiAutoRegister} and automatically - * registers emitter codecs and style providers, removing the need for manual - * registration in {@code ReiParticleSkillForge.registerRuntimePorts()}. - *

- * Conventions: - *

    - *
  • Emitters: must have {@code public static final ResourceLocation CODEC_ID} - * and {@code public static T decode(FriendlyByteBuf)}
  • - *
  • Styles: must have {@code public static final ResourceLocation REGISTRY_KEY} - * and an inner class named {@code Provider} that - * implements {@link ParticleStyleProvider}
  • - *
- */ public final class RuntimePortAutoRegistrar { private RuntimePortAutoRegistrar() { diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/test/SkillTestBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/test/SkillTestBuilder.java index a9c1b36..af696ef 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/test/SkillTestBuilder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/test/SkillTestBuilder.java @@ -11,10 +11,6 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.phys.Vec3; -/** - * Skill test builder that creates a test group with sword formation emitter tests. - * Server-side port of the Fabric original, adapted to Forge test API. - */ public final class SkillTestBuilder implements TestGroupBuilder { public static final String ID = "skill-test-builder"; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ClientParticleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ClientParticleHelper.java index 15dd5dd..ea6dcde 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ClientParticleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ClientParticleHelper.java @@ -6,17 +6,6 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.level.Level; -/** - * Client-side equivalent of {@link ParticleHelper}. - * Spawns particles locally via {@link Level#addAlwaysVisibleParticle} — - * zero network packets, zero server cost. - *

- * Replicates the vanilla {@code ClientboundLevelParticlesPacket} behavior: - *

    - *
  • {@code count > 0}: spawn {@code count} particles with Gaussian offsets
  • - *
  • {@code count == 0}: spawn 1 particle with exact velocity from dist params
  • - *
- */ public final class ClientParticleHelper { private static final RandomSource RANDOM = RandomSource.create(); diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/DragonRespawnStateUtil.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/DragonRespawnStateUtil.java index 0c691f8..d165d68 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/DragonRespawnStateUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/DragonRespawnStateUtil.java @@ -30,12 +30,6 @@ import java.util.List; import java.util.Set; -/** - * Utility singleton that orchestrates dragon respawn animation sequences. - * Manages state transitions (setup → pillars → crystal converge → end explosion) - * using the Animate system and particle emitters/styles. - * Server-side port of the Fabric original. - */ public final class DragonRespawnStateUtil { public static final DragonRespawnStateUtil INSTANCE = new DragonRespawnStateUtil(); @@ -51,9 +45,6 @@ public final class DragonRespawnStateUtil { private DragonRespawnStateUtil() { } - - // ---- Accessors ---- - public String getCurrent() { return current; } @@ -101,13 +92,7 @@ public List getCrystals() { public void setCrystals(List crystals) { this.crystals = crystals == null ? new ArrayList<>() : crystals; } - - // ---- Public API ---- - - /** - * Initialize the respawn state with world context, position, fight instance, and crystals. - */ - public void setup(ServerLevel world, BlockPos pos, EndDragonFight fight, + public void setup(ServerLevel world, BlockPos pos, EndDragonFight fight, List crystals) { this.world = world; this.pos = pos; @@ -119,11 +104,7 @@ public void setup(ServerLevel world, BlockPos pos, EndDragonFight fight, this.tickingAnimates.clear(); } - /** - * Advance to the next respawn phase by id. - * Returns true if the phase transition was recognized and handled. - */ - public boolean next(String id) { + public boolean next(String id) { if (id == null || id.isEmpty()) { return false; } @@ -146,10 +127,7 @@ public boolean next(String id) { return true; } - /** - * Handle the once-pillars event (camera shake + pillar emitters). - */ - public void handleOncePillars(BlockPos pillarPos) { + public void handleOncePillars(BlockPos pillarPos) { if (world == null || pillarPos == null) return; Vec3 center = Vec3.atCenterOf(pillarPos); @@ -169,10 +147,7 @@ public void handleOncePillars(BlockPos pillarPos) { pillarsAnimates.add(pillarAnimate); } - /** - * Handle the end phase — summon explosion and dragon invulnerability toggle. - */ - public void handleEnd() { + public void handleEnd() { if (world == null || pos == null) return; Vec3 center = Vec3.atCenterOf(pos); @@ -202,10 +177,7 @@ public void handleEnd() { }); } - /** - * Get or create the current animate sequence for the active respawn phase. - */ - public Animate getAnimateFrom() { + public Animate getAnimateFrom() { if (currentAnimate != null && !currentAnimate.getDone()) { return currentAnimate; } @@ -241,10 +213,7 @@ public void onDone() { return animate; } - /** - * Tick all active animates. - */ - public void tick() { + public void tick() { // Tick pillar animates pillarsAnimates.removeIf(a -> { a.tick(); @@ -266,10 +235,7 @@ public void tick() { } } - /** - * Cancel all active animates and reset state. - */ - public void cancel() { + public void cancel() { for (Animate a : pillarsAnimates) { if (!a.getDone()) a.cancel(); } @@ -286,9 +252,6 @@ public void cancel() { currentAnimate = null; current = ""; } - - // ---- Internal phases ---- - private void handlePillarsPhase() { if (world == null || pos == null) return; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ParticleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ParticleHelper.java index a6dd7e2..177bbb3 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ParticleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ParticleHelper.java @@ -3,15 +3,8 @@ package com.reiasu.reiparticleskill.util; import net.minecraft.core.particles.ParticleOptions; -import net.minecraft.network.protocol.game.ClientboundLevelParticlesPacket; import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.phys.Vec3; -/** - * Utility for sending particles with force=true so they are visible - * at long range (up to 512 blocks) instead of the default 32 blocks. - */ public final class ParticleHelper { private ParticleHelper() { @@ -24,16 +17,9 @@ public static void sendForce( double xDist, double yDist, double zDist, double speed ) { - ClientboundLevelParticlesPacket packet = new ClientboundLevelParticlesPacket( - type, true, x, y, z, - (float) xDist, (float) yDist, (float) zDist, - (float) speed, count + level.sendParticles( + type, x, y, z, count, + xDist, yDist, zDist, speed ); - Vec3 pos = new Vec3(x, y, z); - for (ServerPlayer player : level.players()) { - if (player.blockPosition().closerToCenterThan(pos, 512.0)) { - player.connection.send(packet); - } - } } } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/GraphMathHelper.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/GraphMathHelper.java index 924e87b..22179dd 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/GraphMathHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/GraphMathHelper.java @@ -6,14 +6,6 @@ public final class GraphMathHelper { private GraphMathHelper() { } - public static float lerp(float alpha, float from, float to) { - return from + (to - from) * alpha; - } - - public static double lerp(double alpha, double from, double to) { - return from + (to - from) * alpha; - } - public static double inverseLerp(double value, double min, double max) { if (max == min) { return 0.0; @@ -22,7 +14,7 @@ public static double inverseLerp(double value, double min, double max) { } public static double smoothstep(double edge0, double edge1, double x) { - double t = Math3DUtil.clamp(inverseLerp(x, edge0, edge1), 0.0, 1.0); + double t = Math.clamp(inverseLerp(x, edge0, edge1), 0.0, 1.0); return t * t * (3.0 - 2.0 * t); } } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/Math3DUtil.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/Math3DUtil.java index 307e81b..dc58272 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/Math3DUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/Math3DUtil.java @@ -13,18 +13,10 @@ public static double length(double x, double y, double z) { return Math.sqrt(x * x + y * y + z * z); } - public static double clamp(double value, double min, double max) { - return Math.max(min, Math.min(max, value)); - } - - public static double lerp(double from, double to, double alpha) { - return from + (to - from) * alpha; - } - public static int colorOf(int r, int g, int b) { - int rr = (int) clamp(r, 0, 255); - int gg = (int) clamp(g, 0, 255); - int bb = (int) clamp(b, 0, 255); + int rr = (int) Math.clamp(r, 0, 255); + int gg = (int) Math.clamp(g, 0, 255); + int bb = (int) Math.clamp(b, 0, 255); return (rr << 16) | (gg << 8) | bb; } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PhysicsUtil.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PhysicsUtil.java index 6dcd838..3ee5b74 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PhysicsUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PhysicsUtil.java @@ -2,6 +2,8 @@ // Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.util.geom; +import net.minecraft.util.Mth; + public final class PhysicsUtil { private PhysicsUtil() { } @@ -11,10 +13,10 @@ public static RelativeLocation applyDrag(RelativeLocation velocity, double dragF } public static RelativeLocation steer(RelativeLocation velocity, RelativeLocation desired, double blend) { - double clampedBlend = Math3DUtil.clamp(blend, 0.0, 1.0); - velocity.setX(Math3DUtil.lerp(velocity.getX(), desired.getX(), clampedBlend)); - velocity.setY(Math3DUtil.lerp(velocity.getY(), desired.getY(), clampedBlend)); - velocity.setZ(Math3DUtil.lerp(velocity.getZ(), desired.getZ(), clampedBlend)); + double clampedBlend = Math.clamp(blend, 0.0, 1.0); + velocity.setX(Mth.lerp(clampedBlend, velocity.getX(), desired.getX())); + velocity.setY(Mth.lerp(clampedBlend, velocity.getY(), desired.getY())); + velocity.setZ(Mth.lerp(clampedBlend, velocity.getZ(), desired.getZ())); return velocity; } diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PointsBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PointsBuilder.java index 744f144..fc665c1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PointsBuilder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PointsBuilder.java @@ -72,15 +72,6 @@ public PointsBuilder pointsOnEach(Consumer action) { return this; } - @Deprecated - public PointsBuilder addWith(Function> generator) { - Collection generated = generator.apply(null); - if (generated != null) { - points.addAll(generated); - } - return this; - } - public PointsBuilder rotateAsAxis(double radians) { double cos = Math.cos(radians); double sin = Math.sin(radians); diff --git a/forge-port/src/main/resources/META-INF/neoforge.mods.toml b/forge-port/src/main/resources/META-INF/neoforge.mods.toml index 43c87ee..9d9eebb 100644 --- a/forge-port/src/main/resources/META-INF/neoforge.mods.toml +++ b/forge-port/src/main/resources/META-INF/neoforge.mods.toml @@ -2,6 +2,16 @@ modLoader="javafml" loaderVersion="${loader_version_range}" license="${mod_license}" +[[mods]] +modId="reiparticlesapi" +version="${mod_version}" +displayName="ReiParticlesAPI" +displayTest="IGNORE_ALL_VERSION" +authors="Reiasu" +description=''' +ReiParticlesAPI — particle system runtime library. +''' + [[mods]] modId="${mod_id}" version="${mod_version}" @@ -9,18 +19,17 @@ displayName="${mod_name}" displayTest="IGNORE_ALL_VERSION" authors="Reiasu" description=''' -ReiParticleSkill gameplay module for NeoForge 1.21.x. -End dragon respawn effects, display and railgun commands run through ReiParticlesAPI runtime. +ReiParticleSkill — particle effects mod for NeoForge 1.21.1. ''' -[[dependencies.${mod_id}]] +[[dependencies.reiparticlesapi]] modId="neoforge" type="required" versionRange="${neo_version_range}" ordering="NONE" side="BOTH" -[[dependencies.${mod_id}]] +[[dependencies.reiparticlesapi]] modId="minecraft" type="required" versionRange="${minecraft_version_range}" @@ -28,10 +37,17 @@ ordering="NONE" side="BOTH" [[dependencies.${mod_id}]] -modId="reiparticlesapi" +modId="neoforge" +type="required" +versionRange="${neo_version_range}" +ordering="NONE" +side="BOTH" + +[[dependencies.${mod_id}]] +modId="minecraft" type="required" -versionRange="[0,)" -ordering="AFTER" +versionRange="${minecraft_version_range}" +ordering="NONE" side="BOTH" [[mixins]] diff --git a/forge-port-api/src/main/resources/assets/reiparticlesapi/particles/controllable_cloud.json b/forge-port/src/main/resources/assets/reiparticlesapi/particles/controllable_cloud.json similarity index 100% rename from forge-port-api/src/main/resources/assets/reiparticlesapi/particles/controllable_cloud.json rename to forge-port/src/main/resources/assets/reiparticlesapi/particles/controllable_cloud.json diff --git a/forge-port-api/src/main/resources/assets/reiparticlesapi/particles/controllable_enchantment.json b/forge-port/src/main/resources/assets/reiparticlesapi/particles/controllable_enchantment.json similarity index 100% rename from forge-port-api/src/main/resources/assets/reiparticlesapi/particles/controllable_enchantment.json rename to forge-port/src/main/resources/assets/reiparticlesapi/particles/controllable_enchantment.json diff --git a/forge-port-api/src/main/resources/assets/reiparticlesapi/particles/controllable_end_rod.json b/forge-port/src/main/resources/assets/reiparticlesapi/particles/controllable_end_rod.json similarity index 100% rename from forge-port-api/src/main/resources/assets/reiparticlesapi/particles/controllable_end_rod.json rename to forge-port/src/main/resources/assets/reiparticlesapi/particles/controllable_end_rod.json diff --git a/forge-port-api/src/main/resources/assets/reiparticlesapi/particles/controllable_falling_dust.json b/forge-port/src/main/resources/assets/reiparticlesapi/particles/controllable_falling_dust.json similarity index 100% rename from forge-port-api/src/main/resources/assets/reiparticlesapi/particles/controllable_falling_dust.json rename to forge-port/src/main/resources/assets/reiparticlesapi/particles/controllable_falling_dust.json diff --git a/forge-port-api/src/main/resources/assets/reiparticlesapi/particles/controllable_firework.json b/forge-port/src/main/resources/assets/reiparticlesapi/particles/controllable_firework.json similarity index 100% rename from forge-port-api/src/main/resources/assets/reiparticlesapi/particles/controllable_firework.json rename to forge-port/src/main/resources/assets/reiparticlesapi/particles/controllable_firework.json diff --git a/forge-port-api/src/main/resources/assets/reiparticlesapi/particles/controllable_flash.json b/forge-port/src/main/resources/assets/reiparticlesapi/particles/controllable_flash.json similarity index 100% rename from forge-port-api/src/main/resources/assets/reiparticlesapi/particles/controllable_flash.json rename to forge-port/src/main/resources/assets/reiparticlesapi/particles/controllable_flash.json diff --git a/forge-port-api/src/main/resources/assets/reiparticlesapi/particles/controllable_splash.json b/forge-port/src/main/resources/assets/reiparticlesapi/particles/controllable_splash.json similarity index 100% rename from forge-port-api/src/main/resources/assets/reiparticlesapi/particles/controllable_splash.json rename to forge-port/src/main/resources/assets/reiparticlesapi/particles/controllable_splash.json diff --git a/forge-port/src/main/resources/pack.mcmeta b/forge-port/src/main/resources/pack.mcmeta index a602b82..73613b9 100644 --- a/forge-port/src/main/resources/pack.mcmeta +++ b/forge-port/src/main/resources/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { "pack_format": 15, - "description": "ReiParticleSkill resources" + "description": "ReiParticlesAPI resources" } } \ No newline at end of file diff --git a/net/minecraft/core/particles/ParticleType.java b/net/minecraft/core/particles/ParticleType.java new file mode 100644 index 0000000..a33e95e --- /dev/null +++ b/net/minecraft/core/particles/ParticleType.java @@ -0,0 +1,21 @@ +package net.minecraft.core.particles; + +import com.mojang.serialization.MapCodec; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; + +public abstract class ParticleType { + private final boolean overrideLimiter; + + protected ParticleType(boolean p_123740_) { + this.overrideLimiter = p_123740_; + } + + public boolean getOverrideLimiter() { + return this.overrideLimiter; + } + + public abstract MapCodec codec(); + + public abstract StreamCodec streamCodec(); +} From 86fac94046efab8abc48b1529fbd4594c97e2c9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A3=A0=E6=B8=9A=E5=90=AC=E6=BD=AE?= Date: Tue, 24 Feb 2026 12:27:12 +0900 Subject: [PATCH 3/3] Cleaned up some headers and tidied things around --- .reuse/dep5 | 49 ------------------- .../reiparticlesapi/ReiParticlesAPI.java | 2 - .../reiparticlesapi/ReiParticlesAPIForge.java | 2 - .../ReiParticlesConstants.java | 2 - .../reiparticlesapi/animation/Animate.java | 2 - .../animation/AnimateAction.java | 2 - .../animation/AnimateManager.java | 2 - .../animation/AnimateNode.java | 2 - .../animation/timeline/AngleAnimator.java | 2 - .../animation/timeline/Ease.java | 2 - .../animation/timeline/Eases.java | 2 - .../animation/timeline/Timeline.java | 2 - .../annotations/CodecField.java | 2 - .../annotations/ReiAutoRegister.java | 2 - .../annotations/codec/BufferCodec.java | 2 - .../annotations/codec/CodecHelper.java | 2 - .../handler/ParticleCompositionHelper.java | 2 - .../display/handle/DisplayEntityHelper.java | 2 - .../handle/ParticleEmittersHelper.java | 2 - .../annotations/events/EventHandler.java | 2 - .../annotations/events/EventListener.java | 2 - .../barrages/AbstractBarrage.java | 2 - .../reiparticlesapi/barrages/Barrage.java | 2 - .../barrages/BarrageHitResult.java | 2 - .../barrages/BarrageManager.java | 2 - .../barrages/BarrageOption.java | 2 - .../reiparticlesapi/barrages/HitBox.java | 2 - .../client/CameraShakeClientState.java | 2 - .../client/ClientTickEventForwarder.java | 2 - .../reiparticlesapi/commands/APICommand.java | 2 - .../reiparticlesapi/config/APIConfig.java | 2 - .../display/DebugDisplayEntity.java | 2 - .../display/DisplayEntity.java | 2 - .../display/DisplayEntityManager.java | 2 - .../display/ReiRenderTypesProvider.java | 2 - .../reiparticlesapi/enums/DistType.java | 2 - .../event/ForgeEventForwarder.java | 2 - .../reiparticlesapi/event/ReiEventBus.java | 2 - .../event/api/EventCancelable.java | 2 - .../event/api/EventExecutor.java | 2 - .../event/api/EventInterruptible.java | 2 - .../event/api/EventPriority.java | 2 - .../reiparticlesapi/event/api/ReiEvent.java | 2 - .../event/events/client/ClientEvent.java | 2 - .../events/client/ClientPostTickEvent.java | 2 - .../events/client/ClientPreTickEvent.java | 2 - .../event/events/entity/EntityEvent.java | 2 - .../event/events/entity/EntityMoveEvent.java | 2 - .../events/entity/EntityPostTickEvent.java | 2 - .../events/entity/EntityPreMoveEvent.java | 2 - .../entity/EntityPrePlaceBlockEvent.java | 2 - .../events/entity/EntityPreTickEvent.java | 2 - .../events/entity/LivingEntityEvent.java | 2 - .../entity/player/PlayerBlockBreakEvent.java | 2 - .../entity/player/PlayerDisconnectEvent.java | 2 - .../events/entity/player/PlayerEvent.java | 2 - .../entity/player/PlayerItemDestroyEvent.java | 2 - .../entity/player/PlayerLoggedInEvent.java | 2 - .../entity/player/ServerPlayerDeathEvent.java | 2 - .../player/ServerPlayerRespawnEvent.java | 2 - .../entity/projectile/ProjectileEvent.java | 2 - .../event/events/key/KeyActionEvent.java | 2 - .../event/events/key/KeyActionType.java | 2 - .../particle/emitter/EmitterRemoveEvent.java | 2 - .../particle/emitter/EmitterSpawnEvent.java | 2 - .../event/events/server/ServerEvent.java | 2 - .../events/server/ServerPostTickEvent.java | 2 - .../events/server/ServerPreTickEvent.java | 2 - .../event/events/world/WorldEvent.java | 2 - .../world/client/ClientWorldChangeEvent.java | 2 - .../client/ClientWorldPostTickEvent.java | 2 - .../world/client/ClientWorldPreTickEvent.java | 2 - .../world/client/ClientWorldRenderEvent.java | 2 - .../exceptions/RenderPipeInputException.java | 2 - .../RenderPipeLinkerNotSetException.java | 2 - .../RenderPipeNotFoundException.java | 2 - .../RenderPipeOutputNotSetException.java | 2 - .../extend/BlockPosExtendsKt.java | 2 - .../extend/ItemStackExtendKt.java | 2 - .../reiparticlesapi/extend/MathExtendsKt.java | 2 - .../reiparticlesapi/extend/Vec3ExtendsKt.java | 2 - .../extend/Vec3iExtendsKt.java | 2 - .../network/ReiParticlesNetwork.java | 2 - .../network/animation/EmittersPathMotion.java | 2 - .../animation/LambdaParticlePathMotion.java | 2 - .../network/animation/ParticlePathMotion.java | 2 - .../network/animation/PathMotionManager.java | 2 - .../network/animation/StylePathMotion.java | 2 - .../animation/api/AbstractPathMotion.java | 2 - .../network/animation/api/PathMotion.java | 2 - .../buffer/AbstractControllerBuffer.java | 2 - .../buffer/BooleanControllerBuffer.java | 2 - .../network/buffer/CharControllerBuffer.java | 2 - .../buffer/DoubleControllerBuffer.java | 2 - .../network/buffer/EmptyControllerBuffer.java | 2 - .../network/buffer/FloatControllerBuffer.java | 2 - .../buffer/IntArrayControllerBuffer.java | 2 - .../network/buffer/IntControllerBuffer.java | 2 - .../buffer/LongArrayControllerBuffer.java | 2 - .../network/buffer/LongControllerBuffer.java | 2 - .../buffer/NestedBuffersControllerBuffer.java | 2 - .../buffer/ParticleControllerDataBuffer.java | 2 - .../buffer/ParticleControllerDataBuffers.java | 2 - .../RelativeLocationControllerBuffer.java | 2 - .../network/buffer/ShortControllerBuffer.java | 2 - .../buffer/StringControllerBuffer.java | 2 - .../network/buffer/UUIDControllerBuffer.java | 2 - .../network/buffer/Vec3dControllerBuffer.java | 2 - .../network/packet/CameraShakeS2CPacket.java | 2 - .../network/packet/PacketCameraShakeS2C.java | 2 - .../packet/PacketDisplayEntityS2C.java | 2 - .../network/packet/PacketKeyActionC2S.java | 2 - .../packet/PacketParticleCompositionS2C.java | 2 - .../packet/PacketParticleEmittersS2C.java | 2 - .../packet/PacketParticleGroupS2C.java | 2 - .../network/packet/PacketParticleS2C.java | 2 - .../packet/PacketParticleStyleS2C.java | 2 - .../network/packet/PacketRenderEntityS2C.java | 2 - .../listener/ClientCameraShakeHandler.java | 2 - .../ClientDisplayEntityPacketHandler.java | 2 - .../ClientParticleCompositionHandler.java | 2 - .../ClientParticleEmittersPacketHandler.java | 2 - .../ClientParticleGroupPacketHandler.java | 2 - .../listener/ClientParticlePacketHandler.java | 2 - .../ClientParticleStylePacketHandler.java | 2 - .../ClientRenderEntityPacketHandler.java | 2 - .../listener/ServerKeyActionHandler.java | 2 - .../SequencedServerParticleGroup.java | 2 - .../network/particle/ServerController.java | 2 - .../network/particle/ServerParticleGroup.java | 2 - .../particle/ServerParticleGroupManager.java | 2 - .../composition/AutoParticleComposition.java | 2 - .../AutoSequencedParticleComposition.java | 2 - .../particle/composition/CompositionData.java | 2 - .../composition/ParticleComposition.java | 2 - .../composition/ParticleShapeComposition.java | 2 - .../SequencedParticleComposition.java | 2 - .../SequencedParticleShapeComposition.java | 2 - .../manager/ParticleCompositionManager.java | 2 - .../particle/data/DoubleRangeData.java | 2 - .../particle/data/DoubleRangeDataKt.java | 2 - .../network/particle/data/FloatRangeData.java | 2 - .../particle/data/FloatRangeDataKt.java | 2 - .../network/particle/data/IntRangeData.java | 2 - .../network/particle/data/IntRangeDataKt.java | 2 - .../network/particle/data/RangeData.java | 2 - .../particle/data/SerializableData.java | 2 - .../emitters/AutoParticleEmitters.java | 2 - .../particle/emitters/ClassEmitters.java | 2 - .../emitters/ClassParticleEmitters.java | 2 - .../emitters/ControllableParticleData.java | 2 - .../emitters/DebugParticleEmitters.java | 2 - .../emitters/DebugRailgunEmitters.java | 2 - .../emitters/DisplayableEmitterData.java | 2 - .../particle/emitters/EmitterRegistry.java | 2 - .../emitters/ParticleDataFactory.java | 2 - .../particle/emitters/ParticleEmitters.java | 2 - .../emitters/ParticleEmittersManager.java | 2 - .../particle/emitters/PhysicConstant.java | 2 - .../emitters/SimpleRandomParticleData.java | 2 - .../particle/emitters/command/OrbitMode.java | 2 - .../command/ParticleAttractionCommand.java | 2 - .../emitters/command/ParticleCommand.java | 2 - .../command/ParticleCommandQueue.java | 2 - .../command/ParticleDistortionCommand.java | 2 - .../emitters/command/ParticleDragCommand.java | 2 - .../command/ParticleFlowFieldCommand.java | 2 - .../command/ParticleGravityCommand.java | 2 - .../command/ParticleNoiseCommand.java | 2 - .../command/ParticleOrbitCommand.java | 2 - .../command/ParticleRotationForceCommand.java | 2 - .../command/ParticleVortexCommand.java | 2 - .../environment/wind/BallWindDirection.java | 2 - .../environment/wind/BoxWindDirection.java | 2 - .../environment/wind/GlobalWindDirection.java | 2 - .../environment/wind/WindDirection.java | 2 - .../environment/wind/WindDirections.java | 2 - .../emitters/event/ParticleCollideEvent.java | 2 - .../emitters/event/ParticleEvent.java | 2 - .../emitters/event/ParticleEventHandler.java | 2 - .../event/ParticleEventHandlerManager.java | 2 - .../event/ParticleHitEntityEvent.java | 2 - .../emitters/event/ParticleOnGroundEvent.java | 2 - .../emitters/event/ParticleOnLiquidEvent.java | 2 - .../impl/DefendClassParticleEmitters.java | 2 - .../impl/ExampleClassParticleEmitters.java | 2 - .../impl/ExplodeClassParticleEmitters.java | 2 - .../impl/FireClassParticleEmitters.java | 2 - .../impl/LightningClassParticleEmitters.java | 2 - .../impl/PhysicsParticleEmitters.java | 2 - .../emitters/impl/PresetLaserEmitters.java | 2 - .../emitters/impl/PresetTestEmitters.java | 2 - .../emitters/impl/SimpleParticleEmitters.java | 2 - .../emitters/type/BoxEmittersShootType.java | 2 - .../emitters/type/EmittersShootType.java | 2 - .../emitters/type/EmittersShootTypes.java | 2 - .../emitters/type/LineEmittersShootType.java | 2 - .../emitters/type/MathEmittersShootType.java | 2 - .../emitters/type/PointEmittersShootType.java | 2 - .../particle/style/ParticleGroupStyle.java | 2 - .../particle/style/ParticleShapeStyle.java | 2 - .../particle/style/ParticleStyleManager.java | 2 - .../particle/style/ParticleStyleProvider.java | 2 - .../style/SequencedParticleShapeStyle.java | 2 - .../style/SequencedParticleStyle.java | 2 - .../network/particle/style/StyleRegistry.java | 2 - .../particle/util/ServerParticleUtil.java | 2 - .../particles/Controllable.java | 2 - .../particles/ControllableParticle.java | 2 - .../particles/ControllableParticleEffect.java | 2 - .../ControllableParticleEffectManager.java | 2 - .../particles/ParticleDisplayer.java | 2 - .../particles/ParticleLerpInterpolator.java | 2 - .../particles/ReiModParticles.java | 2 - .../particles/ReiParticleTextureSheet.java | 2 - .../control/ControlParticleManager.java | 2 - .../particles/control/ControlType.java | 2 - .../particles/control/ParticleController.java | 2 - .../group/ClientParticleGroupManager.java | 2 - .../group/ControllableParticleGroup.java | 2 - .../ControllableParticleGroupProvider.java | 2 - .../control/group/SequencedParticleGroup.java | 2 - .../impl/ControllableCloudEffect.java | 2 - .../impl/ControllableEnchantmentEffect.java | 2 - .../impl/ControllableEndRodEffect.java | 2 - .../impl/ControllableFallingDustEffect.java | 2 - .../impl/ControllableFireworkEffect.java | 2 - .../impl/ControllableFlashEffect.java | 2 - .../impl/ControllableSplashEffect.java | 2 - .../particles/ControllableCloudParticle.java | 2 - .../ControllableEnchantmentParticle.java | 2 - .../particles/ControllableEndRodParticle.java | 2 - .../ControllableFallingDustParticle.java | 2 - .../ControllableFireworkParticle.java | 2 - .../particles/ControllableFlashParticle.java | 2 - .../particles/ControllableSplashParticle.java | 2 - .../reflect/ReiAPIScanner.java | 2 - .../reflect/SimpleClassInfo.java | 2 - .../renderer/RenderEntity.java | 2 - .../client/ClientRenderEntityManager.java | 2 - .../server/ServerRenderEntityManager.java | 2 - .../scheduler/ReiScheduler.java | 2 - .../reiparticlesapi/test/SimpleTestGroup.java | 2 - .../test/SimpleTestGroupBuilder.java | 2 - .../test/SimpleTestOption.java | 2 - .../reiparticlesapi/test/TestManager.java | 2 - .../reiparticlesapi/test/api/TestGroup.java | 2 - .../test/api/TestGroupBuilder.java | 2 - .../reiparticlesapi/test/api/TestOption.java | 2 - .../reiparticlesapi/utils/CircularQueue.java | 2 - .../utils/ClientCameraUtil.java | 2 - .../utils/FourierPhotoUtil.java | 2 - .../utils/GraphMathHelper.java | 2 - .../reiparticlesapi/utils/ImageUtil.java | 2 - .../utils/LinearLevelLerp.java | 2 - .../reiparticlesapi/utils/Math3DUtil.java | 2 - .../reiparticlesapi/utils/MathDataUtil.java | 2 - .../reiparticlesapi/utils/MathPresets.java | 2 - .../reiparticlesapi/utils/NoiseMode.java | 2 - .../reiparticlesapi/utils/PhysicsUtil.java | 2 - .../reiparticlesapi/utils/ReflectUtil.java | 2 - .../utils/RelativeLocation.java | 2 - .../reiparticlesapi/utils/RotationMatrix.java | 2 - .../utils/ServerCameraUtil.java | 2 - .../utils/api/ModelPartPointCollector.java | 2 - .../utils/builder/FourierSeriesBuilder.java | 2 - .../utils/builder/ImagePointBuilder.java | 2 - .../utils/builder/PointsBuilder.java | 2 - .../utils/builder/RGBImagePointBuilder.java | 2 - .../utils/helper/AlphaHelper.java | 2 - .../utils/helper/BezierValueScaleHelper.java | 2 - .../utils/helper/HelperUtil.java | 2 - .../utils/helper/MovementDirectionHelper.java | 2 - .../utils/helper/MovementTargetHelper.java | 2 - .../utils/helper/ParticleHelper.java | 2 - .../utils/helper/ProgressSequencedHelper.java | 2 - .../utils/helper/ScaleHelper.java | 2 - .../helper/SequencedAnimationHelper.java | 2 - .../SequencedCompositionAnimationHelper.java | 2 - .../utils/helper/StatusHelper.java | 2 - .../helper/buffer/ControllableBuffer.java | 2 - .../buffer/ControllableBufferHelper.java | 2 - .../emitters/LinearResistanceHelper.java | 2 - .../impl/GroupBezierValueScaleHelper.java | 2 - .../impl/GroupProgressSequencedHelper.java | 2 - .../utils/helper/impl/GroupScaleHelper.java | 2 - .../helper/impl/ParticleAlphaHelper.java | 2 - .../utils/helper/impl/StyleAlphaHelper.java | 2 - .../impl/StyleBezierValueScaleHelper.java | 2 - .../impl/StyleProgressSequencedHelper.java | 2 - .../utils/helper/impl/StyleScaleHelper.java | 2 - .../utils/helper/impl/StyleStatusHelper.java | 2 - .../composition/CompositionAlphaHelper.java | 2 - .../CompositionBezierScaleHelper.java | 2 - .../composition/CompositionScaleHelper.java | 2 - .../composition/CompositionStatusHelper.java | 2 - .../utils/interpolator/Interpolator.java | 2 - .../interpolator/data/InterpolatorData.java | 2 - .../interpolator/data/InterpolatorDouble.java | 2 - .../interpolator/data/InterpolatorFloat.java | 2 - .../data/InterpolatorRelativeLocation.java | 2 - .../interpolator/data/InterpolatorVec3d.java | 2 - .../data/InterpolatorVector3f.java | 2 - .../emitters/LineEmitterInterpolator.java | 2 - .../particle/CircleParticleInterpolator.java | 2 - .../particle/DirectParticleInterpolator.java | 2 - .../utils/math/ExpressionEvaluator.java | 2 - .../utils/presets/FourierPresets.java | 2 - .../reiparticlesapi/utils/storage/Memo.java | 2 - .../ReiParticleSkillForge.java | 2 - .../animats/DisplayEntityAction.java | 2 - .../animats/EmitterAction.java | 2 - .../animats/EmitterCrafterAction.java | 2 - .../reiparticleskill/animats/StyleAction.java | 2 - .../animats/TickingAction.java | 2 - .../barrages/SkillBarrageManager.java | 2 - .../barrages/SwordAuraBarrage.java | 2 - .../client/EndCrystalBeamSuppressor.java | 2 - .../client/NoBeamEndCrystalRenderer.java | 2 - .../client/SkillClientRegistries.java | 2 - .../client/SkillKeyInputHandler.java | 2 - .../client/SkillKeyMappings.java | 2 - .../command/DisplayDebugRuntime.java | 2 - .../command/ReiParticleSkillDebugCommand.java | 2 - .../command/SkillActionCommand.java | 2 - .../command/layout/DisplayCommandLayout.java | 2 - .../command/layout/DisplayIndexKind.java | 2 - .../command/layout/DisplayIndexPlan.java | 2 - .../command/layout/DisplayIndexRouting.java | 2 - .../command/layout/DisplayOrientation.java | 2 - .../command/layout/DisplaySpawnProfile.java | 2 - .../command/port/APITestCommandPort.java | 2 - .../command/port/DisplayCommandPort.java | 2 - .../command/port/RailgunCommandPort.java | 2 - .../compat/interop/ReiparticlesInterop.java | 2 - .../config/SkillClientConfig.java | 2 - .../ReiParticleSkillDataGenerators.java | 2 - .../datagen/SkillLanguageProvider.java | 2 - .../display/BarrageItemDisplay.java | 2 - .../display/LightFlashDisplay.java | 2 - .../display/ServerMovableDisplay.java | 2 - .../display/SwordLightDisplay.java | 2 - .../group/ServerDisplayGroupManager.java | 2 - .../display/group/ServerOnlyDisplayGroup.java | 2 - .../display/group/ServerOnlyGrowingGroup.java | 2 - .../group/impl/SimpleSwordFormationGroup.java | 2 - .../impl/SimpleSwordFormationGroupGroup.java | 2 - .../formation/HugeSword2AroundFormation.java | 2 - .../formation/HugeSword2CenterFormation.java | 2 - .../formation/HugeSword2CoreFormation.java | 2 - .../impl/formation/HugeSwordFormation.java | 2 - .../impl/formation/SwordRingFormation.java | 2 - .../effects/FormationParticleHelper.java | 2 - .../SwordFormationExplosionEffectGroup.java | 2 - .../SwordFormationSigilEffectGroup.java | 2 - .../SwordFormationVortexEffectGroup.java | 2 - .../SwordFormationWaveEffectGroup.java | 2 - .../effects/SwordRuneEffectGroup.java | 2 - .../group/layout/FormationLayerSpec.java | 2 - .../layout/SimpleSwordFormationLayout.java | 2 - .../layout/SwordFormationLayerPresets.java | 2 - .../enchantments/SkillEnchantments.java | 2 - .../end/respawn/ClientEmitterFactory.java | 2 - .../end/respawn/DragonGravityTracker.java | 2 - .../DragonRespawnAnimationDirector.java | 2 - .../end/respawn/EndDragonFightHelper.java | 2 - .../end/respawn/EndRespawnEffectPreview.java | 2 - .../end/respawn/EndRespawnPhase.java | 2 - .../end/respawn/EndRespawnSnapshot.java | 2 - .../end/respawn/EndRespawnStateBridge.java | 2 - .../end/respawn/EndRespawnWatcher.java | 2 - .../end/respawn/PillarCrafter.java | 2 - .../end/respawn/PillarPulseScheduler.java | 2 - .../emitter/CollectEnderPowerEmitter.java | 2 - .../emitter/CollectPillarsEmitter.java | 2 - .../emitter/EndBeamExplosionEmitter.java | 2 - .../runtime/emitter/EndCrystalEmitter.java | 2 - .../emitter/EndCrystalStyleEmitter.java | 2 - .../emitter/PillarFourierBeamEmitter.java | 2 - .../runtime/emitter/RespawnEmitter.java | 2 - .../runtime/emitter/ShockwaveWallEmitter.java | 2 - .../runtime/emitter/TimedRespawnEmitter.java | 2 - .../emitter/client/ClientCenterEmitter.java | 2 - .../client/ClientCloudRingEmitter.java | 2 - .../emitter/client/ClientDustEmitter.java | 2 - .../client/ClientEnchantRingEmitter.java | 2 - .../entities/BarrageItemEntity.java | 2 - .../entities/SkillEntityTypes.java | 2 - .../renderer/BarrageItemRenderer.java | 2 - .../reiparticleskill/keys/SkillKeys.java | 2 - .../listener/KeyListener.java | 2 - .../listener/ServerListener.java | 2 - .../mixin/EndCrystalRendererMixin.java | 2 - .../reiparticleskill/particles/RangeData.java | 2 - .../emitters/p1/CollectEnderPowerEmitter.java | 2 - .../emitters/p1/CollectPillarsEmitters.java | 2 - .../emitters/p1/EndBeamExplosionEmitter.java | 2 - .../core/emitters/p1/EndCrystalEmitters.java | 2 - .../core/emitters/p1/EndLightBeamEmitter.java | 2 - .../emitters/p1/SummonExplosionEmitter.java | 2 - .../core/emitters/p2/LightEmitter.java | 2 - .../core/emitters/p2/SwordAuraEmitters.java | 2 - .../emitters/p2/SwordExplosionEmitters.java | 2 - .../p2/formation/SwordFormationEmitters.java | 2 - .../SwordFormationExplosionEmitter.java | 2 - .../formation/SwordFormationWaveEmitter.java | 2 - .../display/emitter/ParticleGroupEmitter.java | 2 - .../display/emitter/RailgunBeamEmitter.java | 2 - .../emitter/RailgunExplosionEmitter.java | 2 - .../preview/display/ChangingComposition.java | 2 - .../particles/preview/display/Formation.java | 2 - .../display/LargeMagicCircleStyle.java | 2 - .../preview/display/RailgunBeamStyle.java | 2 - .../display/RailgunChargingRingStyle.java | 2 - .../preview/styles/EndCrystalStyle.java | 2 - .../preview/styles/EndDustStyle.java | 2 - .../styles/EnderRespawnCenterStyle.java | 2 - .../styles/EnderRespawnWaveCloudStyle.java | 2 - .../styles/EnderRespawnWaveEnchantStyle.java | 2 - .../register/RuntimePortAutoRegistrar.java | 2 - .../sounds/SkillSoundEvents.java | 2 - .../test/SkillTestBuilder.java | 2 - .../util/ClientParticleHelper.java | 2 - .../util/DragonRespawnStateUtil.java | 2 - .../reiparticleskill/util/ParticleHelper.java | 2 - .../util/SwordFormationHelper.java | 2 - .../util/SwordLightEnchantUtil.java | 2 - .../util/geom/GraphMathHelper.java | 2 - .../util/geom/Math3DUtil.java | 2 - .../util/geom/PhysicsUtil.java | 2 - .../util/geom/PointsBuilder.java | 2 - .../util/geom/RelativeLocation.java | 2 - 432 files changed, 911 deletions(-) delete mode 100644 .reuse/dep5 diff --git a/.reuse/dep5 b/.reuse/dep5 deleted file mode 100644 index 43f9271..0000000 --- a/.reuse/dep5 +++ /dev/null @@ -1,49 +0,0 @@ -Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: ReiParticleSkill -Upstream-Contact: Reiasu - -Files: * -Copyright: 2025 Reiasu -License: LGPL-3.0-only - -Files: LICENSES/LGPL-3.0.txt -Copyright: 2007 Free Software Foundation, Inc. -License: LGPL-3.0-only - -Files: LICENSES/GPL-3.0.txt -Copyright: 2007 Free Software Foundation, Inc. -License: GPL-3.0-only - -Files: LICENSES/README.md -Copyright: 2025 Reiasu -License: LGPL-3.0-only - -Files: THIRD_PARTY_NOTICES.md -Copyright: 2025 Reiasu -License: LGPL-3.0-only -Comment: Contains third-party license texts reproduced for compliance. - -Files: forge-port/src/main/resources/assets/reiparticleskill/sounds/*.ogg -Copyright: 2025 Reiasu -License: LGPL-3.0-only - -Files: forge-port/*.gradle forge-port/gradle.properties forge-port-api/*.gradle forge-port-api/gradle.properties -Copyright: 2025 Reiasu -License: LGPL-3.0-only - -Files: forge-port/settings.gradle forge-port-api/settings.gradle -Copyright: 2025 Reiasu -License: LGPL-3.0-only - -Files: forge-port/gradlew forge-port/gradlew.bat forge-port-api/gradlew forge-port-api/gradlew.bat -Copyright: Gradle Inc. -License: Apache-2.0 - -Files: forge-port/gradle/wrapper/* forge-port-api/gradle/wrapper/* -Copyright: Gradle Inc. -License: Apache-2.0 - -Files: .github/workflows/* -Copyright: 2025 Reiasu -License: LGPL-3.0-only - diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java index 1a8dd83..7065016 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPI.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi; import net.neoforged.neoforge.common.NeoForge; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java index 53c1fe0..304d11b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesAPIForge.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi; import com.reiasu.reiparticlesapi.animation.AnimateManager; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesConstants.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesConstants.java index fd9bec7..1f8255a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesConstants.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/ReiParticlesConstants.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi; import org.slf4j.Logger; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/Animate.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/Animate.java index c1f230a..85f2d7a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/Animate.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/Animate.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.animation; import java.util.ArrayList; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateAction.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateAction.java index 2f5d0bf..0b44dd2 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateAction.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateAction.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.animation; public abstract class AnimateAction { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateManager.java index 79b94a3..f2ec99c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.animation; import java.util.ArrayList; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateNode.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateNode.java index fa3e4b8..7ffe71a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateNode.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/AnimateNode.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.animation; import java.util.ArrayList; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/AngleAnimator.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/AngleAnimator.java index 33d668f..a42ce8f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/AngleAnimator.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/AngleAnimator.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.animation.timeline; public final class AngleAnimator { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Ease.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Ease.java index 92a789a..721c51a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Ease.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Ease.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.animation.timeline; @FunctionalInterface diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Eases.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Eases.java index dc44fd5..d683619 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Eases.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Eases.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.animation.timeline; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Timeline.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Timeline.java index 75ec19c..e830ad5 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Timeline.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/animation/timeline/Timeline.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.animation.timeline; import java.util.ArrayDeque; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/CodecField.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/CodecField.java index 37c76ce..f78cc14 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/CodecField.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/CodecField.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.annotations; import java.lang.annotation.ElementType; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/ReiAutoRegister.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/ReiAutoRegister.java index 0d4f4aa..46e4685 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/ReiAutoRegister.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/ReiAutoRegister.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.annotations; import java.lang.annotation.ElementType; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/BufferCodec.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/BufferCodec.java index af3b4ae..e91e7ce 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/BufferCodec.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/BufferCodec.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.annotations.codec; import net.minecraft.network.FriendlyByteBuf; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java index 0b404d7..05bde94 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/codec/CodecHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.annotations.codec; import com.reiasu.reiparticlesapi.annotations.CodecField; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/composition/handler/ParticleCompositionHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/composition/handler/ParticleCompositionHelper.java index ccff004..098ddf6 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/composition/handler/ParticleCompositionHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/composition/handler/ParticleCompositionHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.annotations.composition.handler; import com.reiasu.reiparticlesapi.annotations.CodecField; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/display/handle/DisplayEntityHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/display/handle/DisplayEntityHelper.java index 992c2c3..a99ec28 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/display/handle/DisplayEntityHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/display/handle/DisplayEntityHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.annotations.display.handle; import com.reiasu.reiparticlesapi.annotations.CodecField; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/emitter/handle/ParticleEmittersHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/emitter/handle/ParticleEmittersHelper.java index 5bbac92..ce64f4d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/emitter/handle/ParticleEmittersHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/emitter/handle/ParticleEmittersHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.annotations.emitter.handle; import com.reiasu.reiparticlesapi.annotations.CodecField; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventHandler.java index 7874725..8b41b93 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventHandler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventHandler.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.annotations.events; import com.reiasu.reiparticlesapi.event.api.EventPriority; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventListener.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventListener.java index f94c702..3c115cd 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventListener.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/annotations/events/EventListener.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.annotations.events; import java.lang.annotation.ElementType; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/AbstractBarrage.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/AbstractBarrage.java index 284ee4f..cc9dee9 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/AbstractBarrage.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/AbstractBarrage.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.barrages; import com.reiasu.reiparticlesapi.network.particle.ServerController; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/Barrage.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/Barrage.java index 271b7ca..ede7010 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/Barrage.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/Barrage.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.barrages; import com.reiasu.reiparticlesapi.network.particle.ServerController; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageHitResult.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageHitResult.java index 3dba175..ea9cb65 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageHitResult.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageHitResult.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.barrages; import net.minecraft.core.BlockPos; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageManager.java index 1746e31..91e77a1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.barrages; import net.minecraft.server.level.ServerLevel; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageOption.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageOption.java index 4ad4726..3a54237 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageOption.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/BarrageOption.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.barrages; public final class BarrageOption { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/HitBox.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/HitBox.java index 87a6c7d..61ea2d9 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/HitBox.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/barrages/HitBox.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.barrages; import com.reiasu.reiparticlesapi.utils.Math3DUtil; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/client/CameraShakeClientState.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/client/CameraShakeClientState.java index 9422efa..c1c9e19 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/client/CameraShakeClientState.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/client/CameraShakeClientState.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.client; import com.reiasu.reiparticlesapi.ReiParticlesAPIForge; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/client/ClientTickEventForwarder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/client/ClientTickEventForwarder.java index 240b53f..b02f0c6 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/client/ClientTickEventForwarder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/client/ClientTickEventForwarder.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.client; import net.neoforged.neoforge.common.NeoForge; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/commands/APICommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/commands/APICommand.java index 85f2b17..9dbac50 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/commands/APICommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/commands/APICommand.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.commands; import com.reiasu.reiparticlesapi.display.DisplayEntityManager; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java index f631ecd..5ca9ed4 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/config/APIConfig.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.config; import net.neoforged.neoforge.common.ModConfigSpec; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DebugDisplayEntity.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DebugDisplayEntity.java index 04d31a7..66b384b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DebugDisplayEntity.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DebugDisplayEntity.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.display; import net.minecraft.core.particles.DustParticleOptions; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntity.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntity.java index a8c91ee..be37aed 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntity.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntity.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.display; import com.reiasu.reiparticlesapi.network.particle.ServerController; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntityManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntityManager.java index b2225dd..7f22580 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntityManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/DisplayEntityManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.display; import net.minecraft.network.FriendlyByteBuf; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/ReiRenderTypesProvider.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/ReiRenderTypesProvider.java index 1cf0f40..a04211a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/ReiRenderTypesProvider.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/display/ReiRenderTypesProvider.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.display; import net.minecraft.client.renderer.RenderType; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/enums/DistType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/enums/DistType.java index 493203d..a6dc459 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/enums/DistType.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/enums/DistType.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.enums; public enum DistType { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java index 1d69744..257dea7 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/ForgeEventForwarder.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event; import com.reiasu.reiparticlesapi.event.events.entity.EntityMoveEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/ReiEventBus.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/ReiEventBus.java index 2419987..c49ad73 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/ReiEventBus.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/ReiEventBus.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event; import com.reiasu.reiparticlesapi.annotations.events.EventHandler; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventCancelable.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventCancelable.java index dec516b..a3504af 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventCancelable.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventCancelable.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.api; public interface EventCancelable { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventExecutor.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventExecutor.java index a6a68e0..bf4efc1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventExecutor.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventExecutor.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.api; import java.util.Objects; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventInterruptible.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventInterruptible.java index b1edd0b..018d864 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventInterruptible.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventInterruptible.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.api; public interface EventInterruptible { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventPriority.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventPriority.java index 645ff59..394706e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventPriority.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/EventPriority.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.api; public enum EventPriority { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/ReiEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/ReiEvent.java index 7c89cb0..72eb08e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/ReiEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/api/ReiEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.api; import net.neoforged.bus.api.Event; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientEvent.java index 28c5bf9..b6a4994 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.client; import com.reiasu.reiparticlesapi.event.api.ReiEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPostTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPostTickEvent.java index 23d41c3..541eff9 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPostTickEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPostTickEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.client; import net.minecraft.client.Minecraft; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPreTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPreTickEvent.java index 53ad6e4..e94c46f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPreTickEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/client/ClientPreTickEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.client; import net.minecraft.client.Minecraft; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityEvent.java index 5bb1a5e..b30a549 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity; import com.reiasu.reiparticlesapi.event.api.ReiEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityMoveEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityMoveEvent.java index cd815a0..be3e6a7 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityMoveEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityMoveEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity; import com.reiasu.reiparticlesapi.event.api.EventCancelable; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPostTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPostTickEvent.java index 2ce7f42..55e4fa5 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPostTickEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPostTickEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity; import com.reiasu.reiparticlesapi.event.api.EventInterruptible; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreMoveEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreMoveEvent.java index 4c0df89..cd870d5 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreMoveEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreMoveEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity; import com.reiasu.reiparticlesapi.event.api.EventCancelable; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPrePlaceBlockEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPrePlaceBlockEvent.java index a573234..931a5c5 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPrePlaceBlockEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPrePlaceBlockEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity; import com.reiasu.reiparticlesapi.event.api.EventCancelable; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreTickEvent.java index d0f4e3c..6630004 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreTickEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/EntityPreTickEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity; import com.reiasu.reiparticlesapi.event.api.EventCancelable; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/LivingEntityEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/LivingEntityEvent.java index a752dc0..760daa7 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/LivingEntityEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/LivingEntityEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity; import net.minecraft.world.entity.LivingEntity; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerBlockBreakEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerBlockBreakEvent.java index 24bada9..fe8a472 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerBlockBreakEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerBlockBreakEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity.player; import com.reiasu.reiparticlesapi.event.api.EventCancelable; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerDisconnectEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerDisconnectEvent.java index d0962f8..7987cf2 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerDisconnectEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerDisconnectEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity.player; import net.minecraft.world.entity.player.Player; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerEvent.java index 7441af8..279c58f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity.player; import com.reiasu.reiparticlesapi.event.events.entity.EntityEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerItemDestroyEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerItemDestroyEvent.java index 731ffb4..89946e9 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerItemDestroyEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerItemDestroyEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity.player; import net.minecraft.world.entity.player.Player; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerLoggedInEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerLoggedInEvent.java index 2b5dd64..8bc76b1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerLoggedInEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/PlayerLoggedInEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity.player; import net.minecraft.world.entity.player.Player; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerDeathEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerDeathEvent.java index c5b4d04..4737ddc 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerDeathEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerDeathEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity.player; import com.reiasu.reiparticlesapi.event.api.EventCancelable; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerRespawnEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerRespawnEvent.java index b04b2f0..51155fa 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerRespawnEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/player/ServerPlayerRespawnEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity.player; import net.minecraft.world.entity.player.Player; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/projectile/ProjectileEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/projectile/ProjectileEvent.java index e216b7c..098a7c7 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/projectile/ProjectileEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/entity/projectile/ProjectileEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.entity.projectile; import com.reiasu.reiparticlesapi.event.events.entity.EntityEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionEvent.java index 97f2968..adecdaa 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.key; import com.reiasu.reiparticlesapi.event.events.entity.player.PlayerEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionType.java index 1bc7c13..2972e93 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionType.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/key/KeyActionType.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.key; public enum KeyActionType { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterRemoveEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterRemoveEvent.java index 9d94b10..ca694de 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterRemoveEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterRemoveEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.particle.emitter; import com.reiasu.reiparticlesapi.event.api.ReiEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterSpawnEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterSpawnEvent.java index 236e963..f034e93 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterSpawnEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/particle/emitter/EmitterSpawnEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.particle.emitter; import com.reiasu.reiparticlesapi.event.api.ReiEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerEvent.java index aa9c858..35b81e9 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.server; import com.reiasu.reiparticlesapi.event.api.ReiEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPostTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPostTickEvent.java index ccb3f59..981ecc0 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPostTickEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPostTickEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.server; import net.minecraft.server.MinecraftServer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPreTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPreTickEvent.java index cabdb6d..1dfeedb 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPreTickEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/server/ServerPreTickEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.server; import net.minecraft.server.MinecraftServer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/WorldEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/WorldEvent.java index 989c115..a849d91 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/WorldEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/WorldEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.world; import com.reiasu.reiparticlesapi.event.api.ReiEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldChangeEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldChangeEvent.java index 944355d..556dd41 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldChangeEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldChangeEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.world.client; import com.reiasu.reiparticlesapi.event.events.world.WorldEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPostTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPostTickEvent.java index 0881fcf..bec8a2d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPostTickEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPostTickEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.world.client; import com.reiasu.reiparticlesapi.event.events.world.WorldEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPreTickEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPreTickEvent.java index 5cb0ac9..2198844 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPreTickEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldPreTickEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.world.client; import com.reiasu.reiparticlesapi.event.events.world.WorldEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldRenderEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldRenderEvent.java index 2cd9b8d..796640d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldRenderEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/event/events/world/client/ClientWorldRenderEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.event.events.world.client; import com.reiasu.reiparticlesapi.event.events.world.WorldEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeInputException.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeInputException.java index d9eba5a..e6bce7e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeInputException.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeInputException.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.exceptions; public final class RenderPipeInputException extends Exception { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeLinkerNotSetException.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeLinkerNotSetException.java index f56290f..e448387 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeLinkerNotSetException.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeLinkerNotSetException.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.exceptions; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeNotFoundException.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeNotFoundException.java index f187e37..a335fe1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeNotFoundException.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeNotFoundException.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.exceptions; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeOutputNotSetException.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeOutputNotSetException.java index 00997ff..fd3aa2e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeOutputNotSetException.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/exceptions/RenderPipeOutputNotSetException.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.exceptions; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/BlockPosExtendsKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/BlockPosExtendsKt.java index 7632149..92e6b3f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/BlockPosExtendsKt.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/BlockPosExtendsKt.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.extend; import net.minecraft.core.BlockPos; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/ItemStackExtendKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/ItemStackExtendKt.java index b7e098c..3d67fdc 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/ItemStackExtendKt.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/ItemStackExtendKt.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.extend; import net.minecraft.world.item.Item; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/MathExtendsKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/MathExtendsKt.java index 9ba20b7..a9988a7 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/MathExtendsKt.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/MathExtendsKt.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.extend; public final class MathExtendsKt { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3ExtendsKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3ExtendsKt.java index 558c06f..a7acc2b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3ExtendsKt.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3ExtendsKt.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.extend; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3iExtendsKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3iExtendsKt.java index f607242..713755b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3iExtendsKt.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/extend/Vec3iExtendsKt.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.extend; import net.minecraft.core.Vec3i; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java index ac17fea..090ac1e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/ReiParticlesNetwork.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network; import com.reiasu.reiparticlesapi.network.packet.CameraShakeS2CPacket; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/EmittersPathMotion.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/EmittersPathMotion.java index bf36414..8e88cf6 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/EmittersPathMotion.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/EmittersPathMotion.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.animation; import com.reiasu.reiparticlesapi.network.animation.api.AbstractPathMotion; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/LambdaParticlePathMotion.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/LambdaParticlePathMotion.java index 4613d96..e89094e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/LambdaParticlePathMotion.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/LambdaParticlePathMotion.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.animation; import com.reiasu.reiparticlesapi.particles.ControllableParticle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/ParticlePathMotion.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/ParticlePathMotion.java index a56207e..76a1cb0 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/ParticlePathMotion.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/ParticlePathMotion.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.animation; import com.reiasu.reiparticlesapi.network.animation.api.AbstractPathMotion; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/PathMotionManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/PathMotionManager.java index 93b6c80..ee82160 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/PathMotionManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/PathMotionManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.animation; import com.reiasu.reiparticlesapi.network.animation.api.PathMotion; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/StylePathMotion.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/StylePathMotion.java index 41d80e9..824ed6a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/StylePathMotion.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/StylePathMotion.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.animation; import com.reiasu.reiparticlesapi.network.animation.api.AbstractPathMotion; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/AbstractPathMotion.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/AbstractPathMotion.java index 4321a60..e7f28fb 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/AbstractPathMotion.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/AbstractPathMotion.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.animation.api; import net.minecraft.world.phys.Vec3; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/PathMotion.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/PathMotion.java index e4857c9..3429b61 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/PathMotion.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/animation/api/PathMotion.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.animation.api; import net.minecraft.world.phys.Vec3; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/AbstractControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/AbstractControllerBuffer.java index a81a544..ca60114 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/AbstractControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/AbstractControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; public abstract class AbstractControllerBuffer implements ParticleControllerDataBuffer { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/BooleanControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/BooleanControllerBuffer.java index f90ca51..1b29e3e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/BooleanControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/BooleanControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java index 7dfdb95..0a3166b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/CharControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/DoubleControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/DoubleControllerBuffer.java index c58e34b..e636b9f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/DoubleControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/DoubleControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/EmptyControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/EmptyControllerBuffer.java index 5b22aa3..124cee7 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/EmptyControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/EmptyControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/FloatControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/FloatControllerBuffer.java index 3e4a7a4..a9fd65a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/FloatControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/FloatControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntArrayControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntArrayControllerBuffer.java index e33019c..62e9bad 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntArrayControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntArrayControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntControllerBuffer.java index 8e86b71..376bceb 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/IntControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongArrayControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongArrayControllerBuffer.java index 71eac81..1f0785f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongArrayControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongArrayControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongControllerBuffer.java index 00416fb..e4c2284 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/LongControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java index 8f93789..8e9c89e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/NestedBuffersControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffer.java index d58f0f2..9afba5b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffers.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffers.java index 4f14e5a..50414e8 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffers.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ParticleControllerDataBuffers.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/RelativeLocationControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/RelativeLocationControllerBuffer.java index 00344cf..3b4c0de 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/RelativeLocationControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/RelativeLocationControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ShortControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ShortControllerBuffer.java index a017392..e2aa742 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ShortControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/ShortControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/StringControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/StringControllerBuffer.java index 1abadd1..fef27bc 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/StringControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/StringControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/UUIDControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/UUIDControllerBuffer.java index d340eb2..b7ab8e5 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/UUIDControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/UUIDControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/Vec3dControllerBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/Vec3dControllerBuffer.java index 5d0c712..2008793 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/Vec3dControllerBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/buffer/Vec3dControllerBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.buffer; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacket.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacket.java index 16ab747..0bfc540 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacket.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/CameraShakeS2CPacket.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet; import com.reiasu.reiparticlesapi.client.CameraShakeClientState; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketCameraShakeS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketCameraShakeS2C.java index 3f097f5..fd74f2c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketCameraShakeS2C.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketCameraShakeS2C.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet; import com.reiasu.reiparticlesapi.network.packet.client.listener.ClientCameraShakeHandler; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketDisplayEntityS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketDisplayEntityS2C.java index 2125cff..828f826 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketDisplayEntityS2C.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketDisplayEntityS2C.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet; import com.reiasu.reiparticlesapi.network.packet.client.listener.ClientDisplayEntityPacketHandler; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketKeyActionC2S.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketKeyActionC2S.java index a3aaba9..91b71b8 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketKeyActionC2S.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketKeyActionC2S.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet; import com.reiasu.reiparticlesapi.event.events.key.KeyActionType; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleCompositionS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleCompositionS2C.java index b840db2..52a8055 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleCompositionS2C.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleCompositionS2C.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet; import com.reiasu.reiparticlesapi.network.packet.client.listener.ClientParticleCompositionHandler; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleEmittersS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleEmittersS2C.java index b1d83bc..c19af5a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleEmittersS2C.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleEmittersS2C.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet; import com.reiasu.reiparticlesapi.network.packet.client.listener.ClientParticleEmittersPacketHandler; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleGroupS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleGroupS2C.java index 5c852a5..52f3145 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleGroupS2C.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleGroupS2C.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet; import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleS2C.java index cae944d..49e9e23 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleS2C.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleS2C.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet; import com.reiasu.reiparticlesapi.network.packet.client.listener.ClientParticlePacketHandler; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleStyleS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleStyleS2C.java index dfbf0c2..dd7ff66 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleStyleS2C.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketParticleStyleS2C.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet; import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketRenderEntityS2C.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketRenderEntityS2C.java index 2b8721e..84f498a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketRenderEntityS2C.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/PacketRenderEntityS2C.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet; import com.reiasu.reiparticlesapi.network.packet.client.listener.ClientRenderEntityPacketHandler; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientCameraShakeHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientCameraShakeHandler.java index 179b13c..2493f0a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientCameraShakeHandler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientCameraShakeHandler.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet.client.listener; import com.reiasu.reiparticlesapi.client.CameraShakeClientState; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientDisplayEntityPacketHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientDisplayEntityPacketHandler.java index 96d83e4..16f9bc2 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientDisplayEntityPacketHandler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientDisplayEntityPacketHandler.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet.client.listener; import com.reiasu.reiparticlesapi.display.DisplayEntity; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleCompositionHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleCompositionHandler.java index 31c27fc..7353923 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleCompositionHandler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleCompositionHandler.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet.client.listener; import com.reiasu.reiparticlesapi.network.packet.PacketParticleCompositionS2C; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleEmittersPacketHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleEmittersPacketHandler.java index 7afeecd..37a3713 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleEmittersPacketHandler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleEmittersPacketHandler.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet.client.listener; import com.reiasu.reiparticlesapi.network.packet.PacketParticleEmittersS2C; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleGroupPacketHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleGroupPacketHandler.java index 635e50d..b951583 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleGroupPacketHandler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleGroupPacketHandler.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet.client.listener; import com.mojang.logging.LogUtils; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticlePacketHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticlePacketHandler.java index efe4ca3..064212a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticlePacketHandler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticlePacketHandler.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet.client.listener; import com.reiasu.reiparticlesapi.network.packet.PacketParticleS2C; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleStylePacketHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleStylePacketHandler.java index 4f23727..455d109 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleStylePacketHandler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientParticleStylePacketHandler.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet.client.listener; import com.mojang.logging.LogUtils; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientRenderEntityPacketHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientRenderEntityPacketHandler.java index 1f188b4..4c1173d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientRenderEntityPacketHandler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/client/listener/ClientRenderEntityPacketHandler.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet.client.listener; import com.reiasu.reiparticlesapi.network.packet.PacketRenderEntityS2C; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/server/listener/ServerKeyActionHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/server/listener/ServerKeyActionHandler.java index adc6011..67726ae 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/server/listener/ServerKeyActionHandler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/packet/server/listener/ServerKeyActionHandler.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.packet.server.listener; import net.neoforged.neoforge.common.NeoForge; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/SequencedServerParticleGroup.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/SequencedServerParticleGroup.java index f92dec4..05d4901 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/SequencedServerParticleGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/SequencedServerParticleGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle; import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerController.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerController.java index 2681bf2..194f994 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerController.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerController.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle; import net.minecraft.server.level.ServerLevel; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java index c6968af..a329420 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle; import com.reiasu.reiparticlesapi.network.ReiParticlesNetwork; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroupManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroupManager.java index 0b5f014..9fdd7c4 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroupManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/ServerParticleGroupManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle; import com.reiasu.reiparticlesapi.ReiParticlesAPIForge; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoParticleComposition.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoParticleComposition.java index e1273ba..b4a5dae 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoParticleComposition.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoParticleComposition.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.composition; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoSequencedParticleComposition.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoSequencedParticleComposition.java index 30896f3..efd67e4 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoSequencedParticleComposition.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/AutoSequencedParticleComposition.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.composition; import com.reiasu.reiparticlesapi.annotations.codec.BufferCodec; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/CompositionData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/CompositionData.java index 743d17b..1073b83 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/CompositionData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/CompositionData.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.composition; import com.reiasu.reiparticlesapi.particles.Controllable; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleComposition.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleComposition.java index 5a1ae9e..08e2f9c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleComposition.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleComposition.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.composition; import com.reiasu.reiparticlesapi.annotations.codec.CodecHelper; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleShapeComposition.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleShapeComposition.java index d6ff34e..d62038e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleShapeComposition.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/ParticleShapeComposition.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.composition; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleComposition.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleComposition.java index 675b900..15cd65f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleComposition.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleComposition.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.composition; import com.reiasu.reiparticlesapi.utils.Math3DUtil; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleShapeComposition.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleShapeComposition.java index e643f6f..c4cd8fc 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleShapeComposition.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/SequencedParticleShapeComposition.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.composition; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/manager/ParticleCompositionManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/manager/ParticleCompositionManager.java index acceb59..851336d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/manager/ParticleCompositionManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/composition/manager/ParticleCompositionManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.composition.manager; import com.reiasu.reiparticlesapi.network.particle.composition.ParticleComposition; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeData.java index 075aef9..a289f29 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeData.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.data; public record DoubleRangeData(double min, double max) { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeDataKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeDataKt.java index b64b385..ccd1358 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeDataKt.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/DoubleRangeDataKt.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.data; public final class DoubleRangeDataKt { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeData.java index 21233e3..d0a3ef1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeData.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.data; import java.util.concurrent.ThreadLocalRandom; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeDataKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeDataKt.java index 85827ee..de83c5e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeDataKt.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/FloatRangeDataKt.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.data; public final class FloatRangeDataKt { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeData.java index 0e866e9..4f15840 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeData.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.data; import java.util.concurrent.ThreadLocalRandom; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeDataKt.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeDataKt.java index 26adec3..bf8f093 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeDataKt.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/IntRangeDataKt.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.data; public final class IntRangeDataKt { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/RangeData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/RangeData.java index e16c1d2..e747792 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/RangeData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/RangeData.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.data; public abstract class RangeData> { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/SerializableData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/SerializableData.java index 69539c4..cee5d37 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/SerializableData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/data/SerializableData.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.data; import com.reiasu.reiparticlesapi.particles.ParticleDisplayer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/AutoParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/AutoParticleEmitters.java index f6e5b06..71d60e7 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/AutoParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/AutoParticleEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassEmitters.java index 6ad6436..3902d65 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters; import com.mojang.logging.LogUtils; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassParticleEmitters.java index 6d32d65..a264b67 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ClassParticleEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters; import com.reiasu.reiparticlesapi.network.particle.emitters.command.ParticleCommandQueue; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ControllableParticleData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ControllableParticleData.java index 1bbc079..dbe1e86 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ControllableParticleData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ControllableParticleData.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters; import com.reiasu.reiparticlesapi.network.particle.data.SerializableData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugParticleEmitters.java index 4aca0f9..d13006c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugParticleEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters; import net.minecraft.core.particles.DustParticleOptions; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugRailgunEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugRailgunEmitters.java index 467a9de..1e4e109 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugRailgunEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DebugRailgunEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters; import net.minecraft.core.particles.DustParticleOptions; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DisplayableEmitterData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DisplayableEmitterData.java index c78c437..e2099eb 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DisplayableEmitterData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/DisplayableEmitterData.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters; import com.reiasu.reiparticlesapi.network.particle.data.SerializableData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/EmitterRegistry.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/EmitterRegistry.java index 1fde4d8..19cf7be 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/EmitterRegistry.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/EmitterRegistry.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters; import net.minecraft.network.FriendlyByteBuf; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleDataFactory.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleDataFactory.java index 4fa746a..3cd5ed0 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleDataFactory.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleDataFactory.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters; @FunctionalInterface diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java index df08f3c..9fa8571 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters; import com.reiasu.reiparticlesapi.network.particle.ServerController; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManager.java index 6b3f412..b99ed78 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/ParticleEmittersManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters; import com.reiasu.reiparticlesapi.event.ReiEventBus; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/PhysicConstant.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/PhysicConstant.java index 6aa6cd8..1bff4c9 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/PhysicConstant.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/PhysicConstant.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters; public final class PhysicConstant { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/SimpleRandomParticleData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/SimpleRandomParticleData.java index af6dcad..c4bcadf 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/SimpleRandomParticleData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/SimpleRandomParticleData.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters; public class SimpleRandomParticleData extends ControllableParticleData { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/OrbitMode.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/OrbitMode.java index a2f3a42..fe14ef1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/OrbitMode.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/OrbitMode.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.command; public enum OrbitMode { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleAttractionCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleAttractionCommand.java index 7217d57..a1ce699 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleAttractionCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleAttractionCommand.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.command; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommand.java index 62c150a..ca46d55 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommand.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.command; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommandQueue.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommandQueue.java index bec44b0..b71d13e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommandQueue.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleCommandQueue.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.command; import com.mojang.logging.LogUtils; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDistortionCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDistortionCommand.java index a9e38bb..b3fc352 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDistortionCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDistortionCommand.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.command; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDragCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDragCommand.java index cbf0ebf..1678b07 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDragCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleDragCommand.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.command; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleFlowFieldCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleFlowFieldCommand.java index b3a24f0..ee35f52 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleFlowFieldCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleFlowFieldCommand.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.command; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleGravityCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleGravityCommand.java index 2451f53..724bfe8 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleGravityCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleGravityCommand.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.command; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleNoiseCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleNoiseCommand.java index 4a2e5c5..833e95f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleNoiseCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleNoiseCommand.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.command; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleOrbitCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleOrbitCommand.java index 9caf26e..99e923e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleOrbitCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleOrbitCommand.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.command; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleRotationForceCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleRotationForceCommand.java index 1239c15..778e1a2 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleRotationForceCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleRotationForceCommand.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.command; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleVortexCommand.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleVortexCommand.java index 77679c4..71510e8 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleVortexCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/command/ParticleVortexCommand.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.command; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BallWindDirection.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BallWindDirection.java index 2790354..9807d01 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BallWindDirection.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BallWindDirection.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.environment.wind; import com.reiasu.reiparticlesapi.network.particle.emitters.ParticleEmitters; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BoxWindDirection.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BoxWindDirection.java index f334828..bcecb0a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BoxWindDirection.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/BoxWindDirection.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.environment.wind; import com.reiasu.reiparticlesapi.barrages.HitBox; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/GlobalWindDirection.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/GlobalWindDirection.java index 79e8d93..7d88fde 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/GlobalWindDirection.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/GlobalWindDirection.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.environment.wind; import com.reiasu.reiparticlesapi.network.particle.emitters.ParticleEmitters; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirection.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirection.java index 7436d03..c0f1c0b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirection.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirection.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.environment.wind; import com.reiasu.reiparticlesapi.network.particle.emitters.ParticleEmitters; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirections.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirections.java index 35399c7..f6c8e63 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirections.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/environment/wind/WindDirections.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.environment.wind; import com.reiasu.reiparticlesapi.network.particle.emitters.PhysicConstant; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleCollideEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleCollideEvent.java index 2028129..480e955 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleCollideEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleCollideEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.event; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEvent.java index df1146d..783d9c1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.event; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandler.java index aaeead1..a26fef7 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandler.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.event; public interface ParticleEventHandler extends Comparable { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandlerManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandlerManager.java index 61f142b..75b4fc0 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandlerManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleEventHandlerManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.event; import java.util.HashMap; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleHitEntityEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleHitEntityEvent.java index 4aa69d8..12e0839 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleHitEntityEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleHitEntityEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.event; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnGroundEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnGroundEvent.java index e5ee7d0..fef75b1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnGroundEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnGroundEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.event; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnLiquidEvent.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnLiquidEvent.java index 7c9de3b..2688f0e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnLiquidEvent.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/event/ParticleOnLiquidEvent.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.event; import com.reiasu.reiparticlesapi.network.particle.emitters.ControllableParticleData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java index 1f779dd..d4e1921 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/DefendClassParticleEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.impl; import com.reiasu.reiparticlesapi.network.particle.emitters.ClassParticleEmitters; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java index bc68803..c104812 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExampleClassParticleEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.impl; import com.reiasu.reiparticlesapi.network.particle.emitters.ClassParticleEmitters; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java index 3c9d469..52267a0 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/ExplodeClassParticleEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.impl; import com.reiasu.reiparticlesapi.network.particle.emitters.ClassParticleEmitters; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java index fb5254d..912ee71 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/FireClassParticleEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.impl; import com.reiasu.reiparticlesapi.network.particle.emitters.ClassParticleEmitters; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java index 1ada2e9..2ccd731 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/LightningClassParticleEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.impl; import com.reiasu.reiparticlesapi.network.particle.emitters.ClassParticleEmitters; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java index a1216de..d3327fd 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PhysicsParticleEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.impl; import com.reiasu.reiparticlesapi.network.particle.emitters.ClassParticleEmitters; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java index 1a0492e..2ba054a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetLaserEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.impl; import com.reiasu.reiparticlesapi.network.particle.emitters.ClassParticleEmitters; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java index 59e195c..4936f9c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/PresetTestEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.impl; import com.reiasu.reiparticlesapi.network.particle.emitters.ClassParticleEmitters; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java index 4b0ac00..1286940 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/impl/SimpleParticleEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.impl; import com.reiasu.reiparticlesapi.network.particle.emitters.ClassParticleEmitters; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/BoxEmittersShootType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/BoxEmittersShootType.java index e4c31da..0cdbb9c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/BoxEmittersShootType.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/BoxEmittersShootType.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.type; import com.reiasu.reiparticlesapi.barrages.HitBox; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootType.java index 8ed9187..159ed7c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootType.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootType.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.type; import net.minecraft.world.phys.Vec3; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootTypes.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootTypes.java index e07d6c2..c1132a1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootTypes.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/EmittersShootTypes.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.type; import net.minecraft.world.phys.Vec3; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/LineEmittersShootType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/LineEmittersShootType.java index b119f31..a0371d3 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/LineEmittersShootType.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/LineEmittersShootType.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.type; import net.minecraft.world.phys.Vec3; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/MathEmittersShootType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/MathEmittersShootType.java index a363eda..345c594 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/MathEmittersShootType.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/MathEmittersShootType.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.type; import com.reiasu.reiparticlesapi.annotations.codec.BufferCodec; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/PointEmittersShootType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/PointEmittersShootType.java index bfabe94..e0bdfa3 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/PointEmittersShootType.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/emitters/type/PointEmittersShootType.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.emitters.type; import net.minecraft.world.phys.Vec3; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleGroupStyle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleGroupStyle.java index 19d4420..b52875c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleGroupStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleGroupStyle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.style; import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleShapeStyle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleShapeStyle.java index 894b9f8..4273606 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleShapeStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleShapeStyle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.style; import com.reiasu.reiparticlesapi.particles.ControllableParticle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleManager.java index 989b72b..5152551 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.style; import com.reiasu.reiparticlesapi.network.ReiParticlesNetwork; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleProvider.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleProvider.java index f77b9ff..9e85dee 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleProvider.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/ParticleStyleProvider.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.style; import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleShapeStyle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleShapeStyle.java index 32f1b4c..9991d1a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleShapeStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleShapeStyle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.style; import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleStyle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleStyle.java index d7a0341..2eb4348 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/SequencedParticleStyle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.style; import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/StyleRegistry.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/StyleRegistry.java index be6a9b5..ce81441 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/StyleRegistry.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/style/StyleRegistry.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.style; import net.minecraft.resources.ResourceLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/util/ServerParticleUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/util/ServerParticleUtil.java index 384c642..2c00d97 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/util/ServerParticleUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/network/particle/util/ServerParticleUtil.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.network.particle.util; import com.reiasu.reiparticlesapi.network.ReiParticlesNetwork; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/Controllable.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/Controllable.java index 2129540..d67d933 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/Controllable.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/Controllable.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles; import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java index 037ba00..fefba89 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles; import com.reiasu.reiparticlesapi.particles.control.ControlParticleManager; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffect.java index b0d66e1..f15bbcf 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffect.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffect.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles; import net.minecraft.core.particles.ParticleOptions; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffectManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffectManager.java index 342da32..3dcf7e7 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffectManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ControllableParticleEffectManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles; import com.reiasu.reiparticlesapi.particles.impl.*; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleDisplayer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleDisplayer.java index 336617a..ae54af5 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleDisplayer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleDisplayer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles; import com.reiasu.reiparticlesapi.display.DisplayEntity; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleLerpInterpolator.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleLerpInterpolator.java index de84b10..b178b00 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleLerpInterpolator.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ParticleLerpInterpolator.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles; import net.minecraft.world.phys.Vec3; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java index ca1a322..3ad5c94 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ReiModParticles.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles; import com.reiasu.reiparticlesapi.particles.impl.*; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java index 3156b17..ed4b694 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/ReiParticleTextureSheet.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles; import com.mojang.blaze3d.platform.GlStateManager; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlParticleManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlParticleManager.java index f30ab1b..5958306 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlParticleManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlParticleManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.control; import java.util.UUID; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlType.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlType.java index 481fe48..b9eeb7a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlType.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ControlType.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.control; public enum ControlType { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ParticleController.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ParticleController.java index b7ce02a..9822ae1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ParticleController.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/ParticleController.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.control; import com.reiasu.reiparticlesapi.particles.Controllable; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ClientParticleGroupManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ClientParticleGroupManager.java index 7035864..894b9e9 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ClientParticleGroupManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ClientParticleGroupManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.control.group; import net.minecraft.client.Minecraft; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroup.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroup.java index 2ed16bd..ea00265 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.control.group; import com.reiasu.reiparticlesapi.network.particle.style.ParticleGroupStyle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroupProvider.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroupProvider.java index a51de68..ea96583 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroupProvider.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/ControllableParticleGroupProvider.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.control.group; import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/SequencedParticleGroup.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/SequencedParticleGroup.java index 0ebda56..65cbba1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/SequencedParticleGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/control/group/SequencedParticleGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.control.group; import com.mojang.logging.LogUtils; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableCloudEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableCloudEffect.java index d4f6429..1b70c10 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableCloudEffect.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableCloudEffect.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.impl; import com.reiasu.reiparticlesapi.particles.ControllableParticleEffect; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEnchantmentEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEnchantmentEffect.java index e09a91f..b4e9a5f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEnchantmentEffect.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEnchantmentEffect.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.impl; import com.reiasu.reiparticlesapi.particles.ControllableParticleEffect; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEndRodEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEndRodEffect.java index 94aebe7..784bc97 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEndRodEffect.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableEndRodEffect.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.impl; import com.reiasu.reiparticlesapi.particles.ControllableParticleEffect; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFallingDustEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFallingDustEffect.java index 37a3a23..e0d0099 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFallingDustEffect.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFallingDustEffect.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.impl; import com.reiasu.reiparticlesapi.particles.ControllableParticleEffect; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFireworkEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFireworkEffect.java index a452f99..1e084ca 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFireworkEffect.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFireworkEffect.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.impl; import com.reiasu.reiparticlesapi.particles.ControllableParticleEffect; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFlashEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFlashEffect.java index 38e0161..f3044c2 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFlashEffect.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableFlashEffect.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.impl; import com.reiasu.reiparticlesapi.particles.ControllableParticleEffect; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableSplashEffect.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableSplashEffect.java index 8c04933..7a2e621 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableSplashEffect.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/ControllableSplashEffect.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.impl; import com.reiasu.reiparticlesapi.particles.ControllableParticleEffect; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableCloudParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableCloudParticle.java index a396c89..dbf6939 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableCloudParticle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableCloudParticle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.impl.particles; import com.reiasu.reiparticlesapi.particles.ControllableParticle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEnchantmentParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEnchantmentParticle.java index 796768e..00cc1cd 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEnchantmentParticle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEnchantmentParticle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.impl.particles; import com.reiasu.reiparticlesapi.particles.ControllableParticle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEndRodParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEndRodParticle.java index b30b257..c7acd5b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEndRodParticle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableEndRodParticle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.impl.particles; import com.reiasu.reiparticlesapi.particles.ControllableParticle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFallingDustParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFallingDustParticle.java index de9841f..cef5942 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFallingDustParticle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFallingDustParticle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.impl.particles; import com.reiasu.reiparticlesapi.particles.ControllableParticle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFireworkParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFireworkParticle.java index bca6ba0..44392de 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFireworkParticle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFireworkParticle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.impl.particles; import com.reiasu.reiparticlesapi.particles.ControllableParticle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFlashParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFlashParticle.java index 5ee0964..f26abd4 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFlashParticle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableFlashParticle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.impl.particles; import com.reiasu.reiparticlesapi.particles.ControllableParticle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableSplashParticle.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableSplashParticle.java index 4f893c7..e8777de 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableSplashParticle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/particles/impl/particles/ControllableSplashParticle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.particles.impl.particles; import com.reiasu.reiparticlesapi.particles.ControllableParticle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/reflect/ReiAPIScanner.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/reflect/ReiAPIScanner.java index f237c66..a9e3a74 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/reflect/ReiAPIScanner.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/reflect/ReiAPIScanner.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.reflect; import com.mojang.logging.LogUtils; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/reflect/SimpleClassInfo.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/reflect/SimpleClassInfo.java index 2965280..ee27c89 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/reflect/SimpleClassInfo.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/reflect/SimpleClassInfo.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.reflect; import java.lang.annotation.Annotation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/RenderEntity.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/RenderEntity.java index eb1fa51..d995a8f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/RenderEntity.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/RenderEntity.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.renderer; import com.reiasu.reiparticlesapi.network.particle.ServerController; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/client/ClientRenderEntityManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/client/ClientRenderEntityManager.java index 01442e6..cbcd80f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/client/ClientRenderEntityManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/client/ClientRenderEntityManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.renderer.client; import com.reiasu.reiparticlesapi.renderer.RenderEntity; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/server/ServerRenderEntityManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/server/ServerRenderEntityManager.java index 3679e37..0599938 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/server/ServerRenderEntityManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/renderer/server/ServerRenderEntityManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.renderer.server; import com.reiasu.reiparticlesapi.network.ReiParticlesNetwork; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/scheduler/ReiScheduler.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/scheduler/ReiScheduler.java index ad118e6..928b3a6 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/scheduler/ReiScheduler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/scheduler/ReiScheduler.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.scheduler; import java.util.concurrent.ConcurrentLinkedQueue; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroup.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroup.java index 787cedd..791c964 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.test; import com.reiasu.reiparticlesapi.test.api.TestGroup; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroupBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroupBuilder.java index ac169b5..d34ad0b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroupBuilder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestGroupBuilder.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.test; import com.reiasu.reiparticlesapi.test.api.TestGroup; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestOption.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestOption.java index 8c6272c..f4ff589 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestOption.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/SimpleTestOption.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.test; import com.reiasu.reiparticlesapi.test.api.TestOption; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/TestManager.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/TestManager.java index f7520d9..09f65a8 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/TestManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/TestManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.test; import com.reiasu.reiparticlesapi.test.api.TestGroup; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroup.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroup.java index fd7ab5b..16dd94c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.test.api; import net.minecraft.server.level.ServerPlayer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroupBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroupBuilder.java index b3e819b..3fc449b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroupBuilder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestGroupBuilder.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.test.api; public interface TestGroupBuilder { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestOption.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestOption.java index cd85574..6fc5fda 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestOption.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/test/api/TestOption.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.test.api; public interface TestOption { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/CircularQueue.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/CircularQueue.java index 88c0e75..bbcff25 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/CircularQueue.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/CircularQueue.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; import java.util.Iterator; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ClientCameraUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ClientCameraUtil.java index abc5d8a..478630b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ClientCameraUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ClientCameraUtil.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; import net.minecraft.world.phys.Vec3; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/FourierPhotoUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/FourierPhotoUtil.java index cc5c409..d2dac6d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/FourierPhotoUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/FourierPhotoUtil.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; import com.reiasu.reiparticlesapi.utils.builder.FourierSeriesBuilder; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java index 5f49545..7577958 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/GraphMathHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; import net.minecraft.util.Mth; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ImageUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ImageUtil.java index 61b2e24..9c31c57 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ImageUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ImageUtil.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/LinearLevelLerp.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/LinearLevelLerp.java index f8688e4..745e0e8 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/LinearLevelLerp.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/LinearLevelLerp.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; import net.minecraft.world.phys.Vec3; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java index b9fc50c..517be8e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/Math3DUtil.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; import java.util.ArrayList; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/MathDataUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/MathDataUtil.java index bd513e9..22eb84b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/MathDataUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/MathDataUtil.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; public final class MathDataUtil { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java index 5b376f3..3539f2b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/MathPresets.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; import com.reiasu.reiparticlesapi.utils.builder.PointsBuilder; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/NoiseMode.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/NoiseMode.java index 5b34ff9..8c73a2a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/NoiseMode.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/NoiseMode.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; public enum NoiseMode { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java index abe062a..4bd8ff8 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/PhysicsUtil.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; import net.minecraft.core.Direction; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ReflectUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ReflectUtil.java index 8181763..d370640 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ReflectUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ReflectUtil.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; import com.mojang.logging.LogUtils; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/RelativeLocation.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/RelativeLocation.java index 8cf6086..c7cc2da 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/RelativeLocation.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/RelativeLocation.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; import net.minecraft.world.phys.Vec3; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/RotationMatrix.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/RotationMatrix.java index 855ec01..a2a7e44 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/RotationMatrix.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/RotationMatrix.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; public final class RotationMatrix { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ServerCameraUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ServerCameraUtil.java index cc9012e..a98939d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ServerCameraUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/ServerCameraUtil.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils; import com.reiasu.reiparticlesapi.network.ReiParticlesNetwork; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/api/ModelPartPointCollector.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/api/ModelPartPointCollector.java index d42b396..6a81efc 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/api/ModelPartPointCollector.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/api/ModelPartPointCollector.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.api; import com.mojang.blaze3d.vertex.PoseStack; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/FourierSeriesBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/FourierSeriesBuilder.java index 0b94df5..1746349 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/FourierSeriesBuilder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/FourierSeriesBuilder.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.builder; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/ImagePointBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/ImagePointBuilder.java index 7e69bf8..1cd6f82 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/ImagePointBuilder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/ImagePointBuilder.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.builder; import com.reiasu.reiparticlesapi.utils.ImageUtil; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/PointsBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/PointsBuilder.java index 6bb4835..5445ee5 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/PointsBuilder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/PointsBuilder.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.builder; import com.reiasu.reiparticlesapi.network.particle.composition.CompositionData; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/RGBImagePointBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/RGBImagePointBuilder.java index 9e15b3b..d7f2c43 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/RGBImagePointBuilder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/builder/RGBImagePointBuilder.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.builder; import com.reiasu.reiparticlesapi.utils.ImageUtil; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/AlphaHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/AlphaHelper.java index d5a559a..8b7b5df 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/AlphaHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/AlphaHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper; import com.reiasu.reiparticlesapi.particles.Controllable; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/BezierValueScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/BezierValueScaleHelper.java index 78b3269..fa54dd7 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/BezierValueScaleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/BezierValueScaleHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/HelperUtil.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/HelperUtil.java index 3662601..70c1d1e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/HelperUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/HelperUtil.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementDirectionHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementDirectionHelper.java index a23a05e..0856af7 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementDirectionHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementDirectionHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementTargetHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementTargetHelper.java index 33fe4f7..923a5db 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementTargetHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/MovementTargetHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ParticleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ParticleHelper.java index f4af8eb..9a30c99 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ParticleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ParticleHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper; import com.reiasu.reiparticlesapi.particles.Controllable; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ProgressSequencedHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ProgressSequencedHelper.java index 0fcb246..b3b0495 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ProgressSequencedHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ProgressSequencedHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper; import com.reiasu.reiparticlesapi.particles.Controllable; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ScaleHelper.java index b48754f..59e2e14 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ScaleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/ScaleHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper; import com.reiasu.reiparticlesapi.particles.Controllable; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedAnimationHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedAnimationHelper.java index 6c538fb..e6c49ea 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedAnimationHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedAnimationHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper; import com.reiasu.reiparticlesapi.network.particle.style.ParticleGroupStyle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedCompositionAnimationHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedCompositionAnimationHelper.java index 45711d9..d54f6cf 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedCompositionAnimationHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/SequencedCompositionAnimationHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper; import com.reiasu.reiparticlesapi.network.particle.composition.ParticleComposition; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/StatusHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/StatusHelper.java index 1ffa67c..1e3026a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/StatusHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/StatusHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper; import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBuffer.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBuffer.java index 4df73ef..67373a3 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBuffer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBuffer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.buffer; import java.lang.annotation.ElementType; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBufferHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBufferHelper.java index 644112a..9a019cc 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBufferHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/buffer/ControllableBufferHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.buffer; import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/emitters/LinearResistanceHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/emitters/LinearResistanceHelper.java index 581a15f..8ea2f29 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/emitters/LinearResistanceHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/emitters/LinearResistanceHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.emitters; import net.minecraft.world.phys.Vec3; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupBezierValueScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupBezierValueScaleHelper.java index 7ceef3b..9f1c614 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupBezierValueScaleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupBezierValueScaleHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.impl; import com.reiasu.reiparticlesapi.network.particle.ServerParticleGroup; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupProgressSequencedHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupProgressSequencedHelper.java index dd4871b..780305d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupProgressSequencedHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupProgressSequencedHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.impl; import com.reiasu.reiparticlesapi.network.particle.SequencedServerParticleGroup; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupScaleHelper.java index 9bf315c..5b4c413 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupScaleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/GroupScaleHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.impl; import com.reiasu.reiparticlesapi.network.particle.ServerParticleGroup; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/ParticleAlphaHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/ParticleAlphaHelper.java index f220ec0..f24bfb2 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/ParticleAlphaHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/ParticleAlphaHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.impl; import com.reiasu.reiparticlesapi.particles.Controllable; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleAlphaHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleAlphaHelper.java index d1804f4..054c74b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleAlphaHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleAlphaHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.impl; import com.reiasu.reiparticlesapi.network.particle.style.ParticleGroupStyle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleBezierValueScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleBezierValueScaleHelper.java index b6666a1..ae6b499 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleBezierValueScaleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleBezierValueScaleHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.impl; import com.reiasu.reiparticlesapi.network.particle.style.ParticleGroupStyle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleProgressSequencedHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleProgressSequencedHelper.java index 735403a..aa6365a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleProgressSequencedHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleProgressSequencedHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.impl; import com.reiasu.reiparticlesapi.network.particle.style.SequencedParticleStyle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleScaleHelper.java index 6f5a826..0aa8cfd 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleScaleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleScaleHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.impl; import com.reiasu.reiparticlesapi.network.particle.style.ParticleGroupStyle; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleStatusHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleStatusHelper.java index 4f8a834..33f5f89 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleStatusHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/StyleStatusHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.impl; import com.reiasu.reiparticlesapi.network.buffer.ParticleControllerDataBuffer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionAlphaHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionAlphaHelper.java index 3122ad2..c2a7170 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionAlphaHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionAlphaHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.impl.composition; import com.reiasu.reiparticlesapi.network.particle.composition.ParticleComposition; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionBezierScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionBezierScaleHelper.java index 6ac0090..688e24a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionBezierScaleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionBezierScaleHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.impl.composition; import com.reiasu.reiparticlesapi.network.particle.composition.ParticleComposition; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionScaleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionScaleHelper.java index 1aa1899..0759691 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionScaleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionScaleHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.impl.composition; import com.reiasu.reiparticlesapi.network.particle.composition.ParticleComposition; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionStatusHelper.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionStatusHelper.java index 8183dc0..1f5d463 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionStatusHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/helper/impl/composition/CompositionStatusHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.helper.impl.composition; import com.reiasu.reiparticlesapi.network.particle.composition.ParticleComposition; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/Interpolator.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/Interpolator.java index 2e80be7..1da9b60 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/Interpolator.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/Interpolator.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.interpolator; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorData.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorData.java index c01c3de..7471e3a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorData.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.interpolator.data; public interface InterpolatorData { diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorDouble.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorDouble.java index 71fde20..318318d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorDouble.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorDouble.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.interpolator.data; import com.reiasu.reiparticlesapi.utils.GraphMathHelper; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorFloat.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorFloat.java index ba47e15..5490295 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorFloat.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorFloat.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.interpolator.data; import com.reiasu.reiparticlesapi.utils.GraphMathHelper; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorRelativeLocation.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorRelativeLocation.java index d8fce4b..10a562f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorRelativeLocation.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorRelativeLocation.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.interpolator.data; import com.reiasu.reiparticlesapi.utils.GraphMathHelper; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVec3d.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVec3d.java index 6dbfac9..dff967c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVec3d.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVec3d.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.interpolator.data; import com.reiasu.reiparticlesapi.utils.GraphMathHelper; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVector3f.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVector3f.java index e25d2db..2b7270d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVector3f.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/data/InterpolatorVector3f.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.interpolator.data; import com.reiasu.reiparticlesapi.utils.GraphMathHelper; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/emitters/LineEmitterInterpolator.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/emitters/LineEmitterInterpolator.java index dfed38a..1b6ca4e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/emitters/LineEmitterInterpolator.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/emitters/LineEmitterInterpolator.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.interpolator.emitters; import com.reiasu.reiparticlesapi.utils.CircularQueue; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/CircleParticleInterpolator.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/CircleParticleInterpolator.java index ba474f5..cd901af 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/CircleParticleInterpolator.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/CircleParticleInterpolator.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.interpolator.particle; import com.reiasu.reiparticlesapi.utils.CircularQueue; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/DirectParticleInterpolator.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/DirectParticleInterpolator.java index 8428c1e..3c13e40 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/DirectParticleInterpolator.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/interpolator/particle/DirectParticleInterpolator.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.interpolator.particle; import com.reiasu.reiparticlesapi.utils.CircularQueue; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java index 5b62a05..b204660 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/math/ExpressionEvaluator.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.math; import java.util.HashMap; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/presets/FourierPresets.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/presets/FourierPresets.java index dedb139..f8ce54b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/presets/FourierPresets.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/presets/FourierPresets.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.presets; import com.reiasu.reiparticlesapi.utils.builder.FourierSeriesBuilder; diff --git a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java index 071719a..cf5e47b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java +++ b/forge-port/src/main/java/com/reiasu/reiparticlesapi/utils/storage/Memo.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticlesapi.utils.storage; import java.util.function.Supplier; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/ReiParticleSkillForge.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/ReiParticleSkillForge.java index f70688b..966091e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/ReiParticleSkillForge.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/ReiParticleSkillForge.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill; import com.reiasu.reiparticlesapi.ReiParticlesAPI; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/DisplayEntityAction.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/DisplayEntityAction.java index 3a6b5ea..2447aa0 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/DisplayEntityAction.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/DisplayEntityAction.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.animats; import com.reiasu.reiparticlesapi.animation.AnimateAction; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/EmitterAction.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/EmitterAction.java index 6f1e9ed..9c3db2d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/EmitterAction.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/EmitterAction.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.animats; import com.reiasu.reiparticlesapi.animation.AnimateAction; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/EmitterCrafterAction.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/EmitterCrafterAction.java index 7344302..624f9e5 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/EmitterCrafterAction.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/EmitterCrafterAction.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.animats; import com.reiasu.reiparticlesapi.animation.AnimateAction; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/StyleAction.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/StyleAction.java index 3017fd7..3b00538 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/StyleAction.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/StyleAction.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.animats; import com.reiasu.reiparticlesapi.animation.AnimateAction; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/TickingAction.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/TickingAction.java index 1f56a24..8286180 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/TickingAction.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/animats/TickingAction.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.animats; import com.reiasu.reiparticlesapi.animation.AnimateAction; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/barrages/SkillBarrageManager.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/barrages/SkillBarrageManager.java index 22f9f06..dc395f2 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/barrages/SkillBarrageManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/barrages/SkillBarrageManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.barrages; import com.reiasu.reiparticlesapi.barrages.Barrage; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/barrages/SwordAuraBarrage.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/barrages/SwordAuraBarrage.java index c2cd656..e147f84 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/barrages/SwordAuraBarrage.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/barrages/SwordAuraBarrage.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.barrages; import com.reiasu.reiparticlesapi.barrages.AbstractBarrage; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/EndCrystalBeamSuppressor.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/EndCrystalBeamSuppressor.java index 4411f7f..7e07d9b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/EndCrystalBeamSuppressor.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/EndCrystalBeamSuppressor.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.client; @Deprecated diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/NoBeamEndCrystalRenderer.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/NoBeamEndCrystalRenderer.java index 1fe8bb3..823e22a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/NoBeamEndCrystalRenderer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/NoBeamEndCrystalRenderer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.client; import com.mojang.blaze3d.vertex.PoseStack; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillClientRegistries.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillClientRegistries.java index cdb51f7..d5c50dc 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillClientRegistries.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillClientRegistries.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.client; import com.reiasu.reiparticleskill.ReiParticleSkillForge; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyInputHandler.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyInputHandler.java index a517b16..fe1e5ab 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyInputHandler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyInputHandler.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.client; import com.reiasu.reiparticlesapi.event.events.key.KeyActionType; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyMappings.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyMappings.java index 03caa78..d17e33a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyMappings.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/client/SkillKeyMappings.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.client; import com.reiasu.reiparticleskill.ReiParticleSkillForge; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/DisplayDebugRuntime.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/DisplayDebugRuntime.java index 0e9b8da..5d00c14 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/DisplayDebugRuntime.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/DisplayDebugRuntime.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.command; import com.reiasu.reiparticleskill.command.layout.DisplayIndexKind; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/ReiParticleSkillDebugCommand.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/ReiParticleSkillDebugCommand.java index 895b23f..9d7c8dd 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/ReiParticleSkillDebugCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/ReiParticleSkillDebugCommand.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.command; import com.reiasu.reiparticleskill.command.layout.DisplayIndexKind; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/SkillActionCommand.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/SkillActionCommand.java index c2dc6ea..538f6b2 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/SkillActionCommand.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/SkillActionCommand.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.command; import com.reiasu.reiparticleskill.listener.KeyListener; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayCommandLayout.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayCommandLayout.java index c5c91f7..973d320 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayCommandLayout.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayCommandLayout.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.command.layout; import com.reiasu.reiparticleskill.util.geom.Math3DUtil; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayIndexKind.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayIndexKind.java index 56b8084..421f252 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayIndexKind.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayIndexKind.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.command.layout; public enum DisplayIndexKind { diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayIndexPlan.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayIndexPlan.java index 1ec3b4d..ba3d264 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayIndexPlan.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayIndexPlan.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.command.layout; import java.util.Optional; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayIndexRouting.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayIndexRouting.java index 9c69d6b..09844ee 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayIndexRouting.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayIndexRouting.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.command.layout; import java.util.Optional; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayOrientation.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayOrientation.java index dfe2cd1..ad9c455 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayOrientation.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplayOrientation.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.command.layout; public record DisplayOrientation(float yawDegrees, float pitchDegrees) { diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplaySpawnProfile.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplaySpawnProfile.java index 2672180..0edef0c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplaySpawnProfile.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/layout/DisplaySpawnProfile.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.command.layout; public record DisplaySpawnProfile(DisplayOrientation orientation, float targetScale, float scaledSpeed) { diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/port/APITestCommandPort.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/port/APITestCommandPort.java index 86d35c4..b66540b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/port/APITestCommandPort.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/port/APITestCommandPort.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.command.port; import com.reiasu.reiparticleskill.compat.interop.ReiparticlesInterop; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/port/DisplayCommandPort.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/port/DisplayCommandPort.java index 80da637..002b568 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/port/DisplayCommandPort.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/port/DisplayCommandPort.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.command.port; import com.reiasu.reiparticlesapi.display.DisplayEntityManager; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/port/RailgunCommandPort.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/port/RailgunCommandPort.java index e61159b..d49d2ae 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/command/port/RailgunCommandPort.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/command/port/RailgunCommandPort.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.command.port; import com.reiasu.reiparticlesapi.network.particle.emitters.DebugRailgunEmitters; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/compat/interop/ReiparticlesInterop.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/compat/interop/ReiparticlesInterop.java index 79656aa..b50101e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/compat/interop/ReiparticlesInterop.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/compat/interop/ReiparticlesInterop.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.compat.interop; import com.reiasu.reiparticlesapi.display.DebugDisplayEntity; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/config/SkillClientConfig.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/config/SkillClientConfig.java index 6b3b57e..07af705 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/config/SkillClientConfig.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/config/SkillClientConfig.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.config; import net.neoforged.neoforge.common.ModConfigSpec; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/ReiParticleSkillDataGenerators.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/ReiParticleSkillDataGenerators.java index 36365de..d6c39ef 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/ReiParticleSkillDataGenerators.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/ReiParticleSkillDataGenerators.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.datagen; import com.reiasu.reiparticleskill.ReiParticleSkillForge; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/SkillLanguageProvider.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/SkillLanguageProvider.java index 1b64db8..b4e17b2 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/SkillLanguageProvider.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/datagen/SkillLanguageProvider.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.datagen; import com.reiasu.reiparticleskill.ReiParticleSkillForge; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/BarrageItemDisplay.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/BarrageItemDisplay.java index 9bfdf2a..a10e940 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/BarrageItemDisplay.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/BarrageItemDisplay.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display; import com.reiasu.reiparticlesapi.display.DisplayEntity; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/LightFlashDisplay.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/LightFlashDisplay.java index 82e6b44..dc0dd4c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/LightFlashDisplay.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/LightFlashDisplay.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display; import com.reiasu.reiparticlesapi.display.DisplayEntity; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/ServerMovableDisplay.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/ServerMovableDisplay.java index 3df5ba8..e318681 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/ServerMovableDisplay.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/ServerMovableDisplay.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display; import net.minecraft.world.phys.Vec3; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/SwordLightDisplay.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/SwordLightDisplay.java index b80ab13..a726a06 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/SwordLightDisplay.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/SwordLightDisplay.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display; import com.reiasu.reiparticlesapi.display.DisplayEntity; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/ServerDisplayGroupManager.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/ServerDisplayGroupManager.java index 0efd51b..17d2693 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/ServerDisplayGroupManager.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/ServerDisplayGroupManager.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group; import java.util.Collections; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/ServerOnlyDisplayGroup.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/ServerOnlyDisplayGroup.java index 1bbd8fc..bc26e71 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/ServerOnlyDisplayGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/ServerOnlyDisplayGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group; import com.reiasu.reiparticlesapi.display.DisplayEntity; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/ServerOnlyGrowingGroup.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/ServerOnlyGrowingGroup.java index efda75b..49b2f9a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/ServerOnlyGrowingGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/ServerOnlyGrowingGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/SimpleSwordFormationGroup.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/SimpleSwordFormationGroup.java index 5a37a2e..8069f44 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/SimpleSwordFormationGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/SimpleSwordFormationGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.impl; import com.reiasu.reiparticlesapi.display.DisplayEntity; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/SimpleSwordFormationGroupGroup.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/SimpleSwordFormationGroupGroup.java index b62c653..f4306ac 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/SimpleSwordFormationGroupGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/SimpleSwordFormationGroupGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.impl; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSword2AroundFormation.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSword2AroundFormation.java index fe13718..4b48695 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSword2AroundFormation.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSword2AroundFormation.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.impl.formation; import com.reiasu.reiparticlesapi.animation.timeline.Eases; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSword2CenterFormation.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSword2CenterFormation.java index 4692a99..b97965a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSword2CenterFormation.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSword2CenterFormation.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.impl.formation; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSword2CoreFormation.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSword2CoreFormation.java index 45fffbc..fdbc19f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSword2CoreFormation.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSword2CoreFormation.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.impl.formation; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSwordFormation.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSwordFormation.java index 547d8b8..f45855c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSwordFormation.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/HugeSwordFormation.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.impl.formation; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/SwordRingFormation.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/SwordRingFormation.java index 9b951ea..5060737 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/SwordRingFormation.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/SwordRingFormation.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.impl.formation; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/FormationParticleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/FormationParticleHelper.java index 3660e96..63746a2 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/FormationParticleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/FormationParticleHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.impl.formation.effects; import net.minecraft.core.particles.DustParticleOptions; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationExplosionEffectGroup.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationExplosionEffectGroup.java index e38d8dc..6a1e74e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationExplosionEffectGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationExplosionEffectGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.impl.formation.effects; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationSigilEffectGroup.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationSigilEffectGroup.java index bb0ca2e..1c3d89d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationSigilEffectGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationSigilEffectGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.impl.formation.effects; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationVortexEffectGroup.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationVortexEffectGroup.java index fbfe14a..2916d25 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationVortexEffectGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationVortexEffectGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.impl.formation.effects; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationWaveEffectGroup.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationWaveEffectGroup.java index c62a57d..57fcac5 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationWaveEffectGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordFormationWaveEffectGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.impl.formation.effects; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordRuneEffectGroup.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordRuneEffectGroup.java index 106690f..536c98d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordRuneEffectGroup.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/impl/formation/effects/SwordRuneEffectGroup.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.impl.formation.effects; import com.reiasu.reiparticlesapi.utils.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/layout/FormationLayerSpec.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/layout/FormationLayerSpec.java index 9f4bb38..970f05d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/layout/FormationLayerSpec.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/layout/FormationLayerSpec.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.layout; public record FormationLayerSpec(double radius, int count, double rotationSpeed) { diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/layout/SimpleSwordFormationLayout.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/layout/SimpleSwordFormationLayout.java index cf296e5..3a5c44c 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/layout/SimpleSwordFormationLayout.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/layout/SimpleSwordFormationLayout.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.layout; import com.reiasu.reiparticleskill.util.geom.PointsBuilder; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/layout/SwordFormationLayerPresets.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/layout/SwordFormationLayerPresets.java index 1b85c66..aa68c83 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/layout/SwordFormationLayerPresets.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/display/group/layout/SwordFormationLayerPresets.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.display.group.layout; import com.reiasu.reiparticleskill.util.geom.RelativeLocation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SkillEnchantments.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SkillEnchantments.java index ecbc35a..5577cb0 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SkillEnchantments.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/enchantments/SkillEnchantments.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.enchantments; import com.reiasu.reiparticleskill.ReiParticleSkillForge; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/ClientEmitterFactory.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/ClientEmitterFactory.java index 1a2beb2..c9928b3 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/ClientEmitterFactory.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/ClientEmitterFactory.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn; import com.reiasu.reiparticleskill.end.respawn.runtime.emitter.client.ClientCenterEmitter; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonGravityTracker.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonGravityTracker.java index fb0dc33..91db701 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonGravityTracker.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonGravityTracker.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn; import net.minecraft.server.level.ServerLevel; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonRespawnAnimationDirector.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonRespawnAnimationDirector.java index f44c65f..42ed6ea 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonRespawnAnimationDirector.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/DragonRespawnAnimationDirector.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn; import com.reiasu.reiparticleskill.end.respawn.runtime.emitter.CollectEnderPowerEmitter; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndDragonFightHelper.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndDragonFightHelper.java index 74dcb2b..cbceacc 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndDragonFightHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndDragonFightHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn; import net.minecraft.core.BlockPos; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnEffectPreview.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnEffectPreview.java index 0c326e2..40ef8ad 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnEffectPreview.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnEffectPreview.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn; import net.minecraft.core.particles.DustParticleOptions; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnPhase.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnPhase.java index d2c50f1..fc3304e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnPhase.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnPhase.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn; import java.util.Locale; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnSnapshot.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnSnapshot.java index dec3069..425c373 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnSnapshot.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnSnapshot.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn; import net.minecraft.world.phys.Vec3; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnStateBridge.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnStateBridge.java index 58302eb..e105183 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnStateBridge.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnStateBridge.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn; import net.minecraft.server.level.ServerLevel; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnWatcher.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnWatcher.java index aaa8668..762ff6a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnWatcher.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/EndRespawnWatcher.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn; import net.minecraft.server.MinecraftServer; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarCrafter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarCrafter.java index a3328c3..eb1bd97 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarCrafter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarCrafter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn; import net.minecraft.server.level.ServerLevel; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarPulseScheduler.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarPulseScheduler.java index 10892c8..71ee7b4 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarPulseScheduler.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/PillarPulseScheduler.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn; import net.minecraft.core.BlockPos; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/CollectEnderPowerEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/CollectEnderPowerEmitter.java index aa270a3..a6107d5 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/CollectEnderPowerEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/CollectEnderPowerEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn.runtime.emitter; import com.reiasu.reiparticleskill.util.ParticleHelper; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/CollectPillarsEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/CollectPillarsEmitter.java index f1fd57d..877b9d0 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/CollectPillarsEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/CollectPillarsEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn.runtime.emitter; import com.reiasu.reiparticleskill.util.ParticleHelper; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndBeamExplosionEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndBeamExplosionEmitter.java index baacad6..36c49bd 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndBeamExplosionEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndBeamExplosionEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn.runtime.emitter; import com.reiasu.reiparticleskill.util.ParticleHelper; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndCrystalEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndCrystalEmitter.java index 25ed37b..436f725 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndCrystalEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndCrystalEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn.runtime.emitter; import com.reiasu.reiparticleskill.util.ParticleHelper; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndCrystalStyleEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndCrystalStyleEmitter.java index 9fe7d4e..6ac6ca0 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndCrystalStyleEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/EndCrystalStyleEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn.runtime.emitter; import com.reiasu.reiparticleskill.util.ParticleHelper; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/PillarFourierBeamEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/PillarFourierBeamEmitter.java index 5b4da50..4a1a46b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/PillarFourierBeamEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/PillarFourierBeamEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn.runtime.emitter; import com.reiasu.reiparticleskill.util.ParticleHelper; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/RespawnEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/RespawnEmitter.java index f0d9442..f8166c8 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/RespawnEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/RespawnEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn.runtime.emitter; import net.minecraft.server.level.ServerLevel; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/ShockwaveWallEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/ShockwaveWallEmitter.java index 48a88e1..94eb51b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/ShockwaveWallEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/ShockwaveWallEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn.runtime.emitter; import com.reiasu.reiparticleskill.util.ParticleHelper; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/TimedRespawnEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/TimedRespawnEmitter.java index 7c18842..efa173d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/TimedRespawnEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/TimedRespawnEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn.runtime.emitter; import net.minecraft.server.level.ServerLevel; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCenterEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCenterEmitter.java index 5ad1559..ee2ad38 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCenterEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCenterEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn.runtime.emitter.client; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCloudRingEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCloudRingEmitter.java index 1bfe061..cac71cb 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCloudRingEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientCloudRingEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn.runtime.emitter.client; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientDustEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientDustEmitter.java index 8d93dc5..a363eaf 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientDustEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientDustEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn.runtime.emitter.client; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientEnchantRingEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientEnchantRingEmitter.java index 5ede767..1ae4040 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientEnchantRingEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/end/respawn/runtime/emitter/client/ClientEnchantRingEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.end.respawn.runtime.emitter.client; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/BarrageItemEntity.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/BarrageItemEntity.java index f0b7f90..0338c1d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/BarrageItemEntity.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/BarrageItemEntity.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.entities; import net.minecraft.nbt.CompoundTag; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/SkillEntityTypes.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/SkillEntityTypes.java index 37cf5e3..fb8605b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/SkillEntityTypes.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/SkillEntityTypes.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.entities; import com.reiasu.reiparticleskill.ReiParticleSkillForge; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/renderer/BarrageItemRenderer.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/renderer/BarrageItemRenderer.java index c0bc72b..3984ba1 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/renderer/BarrageItemRenderer.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/entities/renderer/BarrageItemRenderer.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.entities.renderer; import com.reiasu.reiparticleskill.entities.BarrageItemEntity; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/keys/SkillKeys.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/keys/SkillKeys.java index 2e5940e..16444d2 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/keys/SkillKeys.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/keys/SkillKeys.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.keys; import com.reiasu.reiparticleskill.ReiParticleSkillForge; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/KeyListener.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/KeyListener.java index 9b62859..2adb070 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/KeyListener.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/KeyListener.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.listener; import com.reiasu.reiparticlesapi.event.events.key.KeyActionEvent; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/ServerListener.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/ServerListener.java index cf23ed2..371588d 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/ServerListener.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/listener/ServerListener.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.listener; import com.reiasu.reiparticleskill.barrages.SkillBarrageManager; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/mixin/EndCrystalRendererMixin.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/mixin/EndCrystalRendererMixin.java index 4eb7d38..3f3178a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/mixin/EndCrystalRendererMixin.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/mixin/EndCrystalRendererMixin.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.mixin; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/RangeData.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/RangeData.java index 0f2fa2d..4d3ddeb 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/RangeData.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/RangeData.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles; public final class RangeData { diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectEnderPowerEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectEnderPowerEmitter.java index 38d4082..4c96c57 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectEnderPowerEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectEnderPowerEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.core.emitters.p1; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectPillarsEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectPillarsEmitters.java index b0330d4..306b641 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectPillarsEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/CollectPillarsEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.core.emitters.p1; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndBeamExplosionEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndBeamExplosionEmitter.java index 73d1dd7..e7d48b5 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndBeamExplosionEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndBeamExplosionEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.core.emitters.p1; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndCrystalEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndCrystalEmitters.java index fb6890f..ccfe7dc 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndCrystalEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndCrystalEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.core.emitters.p1; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndLightBeamEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndLightBeamEmitter.java index 16c2bda..070af40 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndLightBeamEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/EndLightBeamEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.core.emitters.p1; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/SummonExplosionEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/SummonExplosionEmitter.java index 114828a..dc910dc 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/SummonExplosionEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p1/SummonExplosionEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.core.emitters.p1; import com.reiasu.reiparticlesapi.network.particle.emitters.AutoParticleEmitters; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/LightEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/LightEmitter.java index d1fc4d1..3974893 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/LightEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/LightEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.core.emitters.p2; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordAuraEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordAuraEmitters.java index 85b9c00..8f94183 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordAuraEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordAuraEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.core.emitters.p2; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordExplosionEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordExplosionEmitters.java index 8da5c93..7ba781f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordExplosionEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/SwordExplosionEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.core.emitters.p2; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationEmitters.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationEmitters.java index d2967a0..362c4b3 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationEmitters.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationEmitters.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.core.emitters.p2.formation; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationExplosionEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationExplosionEmitter.java index 20eaa68..0a80344 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationExplosionEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationExplosionEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.core.emitters.p2.formation; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationWaveEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationWaveEmitter.java index 75cafb3..478beb9 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationWaveEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/core/emitters/p2/formation/SwordFormationWaveEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.core.emitters.p2.formation; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/ParticleGroupEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/ParticleGroupEmitter.java index 2dfd829..8c1272e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/ParticleGroupEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/ParticleGroupEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.display.emitter; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunBeamEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunBeamEmitter.java index 28d9a05..aa7733f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunBeamEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunBeamEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.display.emitter; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunExplosionEmitter.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunExplosionEmitter.java index f36d1ec..b312181 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunExplosionEmitter.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/display/emitter/RailgunExplosionEmitter.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.display.emitter; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/ChangingComposition.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/ChangingComposition.java index 48a46f3..fecce7f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/ChangingComposition.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/ChangingComposition.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.preview.display; import com.reiasu.reiparticlesapi.network.particle.composition.AutoParticleComposition; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/Formation.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/Formation.java index 9ef94b6..4d8aa53 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/Formation.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/Formation.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.preview.display; import com.reiasu.reiparticlesapi.network.particle.composition.AutoParticleComposition; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/LargeMagicCircleStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/LargeMagicCircleStyle.java index 79a2a37..30fb35e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/LargeMagicCircleStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/LargeMagicCircleStyle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.preview.display; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunBeamStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunBeamStyle.java index e823004..1cf7090 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunBeamStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunBeamStyle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.preview.display; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunChargingRingStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunChargingRingStyle.java index 8c7fc5f..025aa5b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunChargingRingStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/display/RailgunChargingRingStyle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.preview.display; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndCrystalStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndCrystalStyle.java index 9439368..54ecb40 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndCrystalStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndCrystalStyle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.preview.styles; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndDustStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndDustStyle.java index 25a0b04..d677c6e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndDustStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EndDustStyle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.preview.styles; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnCenterStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnCenterStyle.java index f01281c..6445c36 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnCenterStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnCenterStyle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.preview.styles; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveCloudStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveCloudStyle.java index bac657f..87c1ad3 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveCloudStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveCloudStyle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.preview.styles; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveEnchantStyle.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveEnchantStyle.java index 2d1d852..aa0a4ea 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveEnchantStyle.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/particles/preview/styles/EnderRespawnWaveEnchantStyle.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.particles.preview.styles; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/register/RuntimePortAutoRegistrar.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/register/RuntimePortAutoRegistrar.java index c6a328c..0a2f982 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/register/RuntimePortAutoRegistrar.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/register/RuntimePortAutoRegistrar.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.register; import com.reiasu.reiparticlesapi.annotations.ReiAutoRegister; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/sounds/SkillSoundEvents.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/sounds/SkillSoundEvents.java index 807db5e..a7efd51 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/sounds/SkillSoundEvents.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/sounds/SkillSoundEvents.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.sounds; import com.reiasu.reiparticleskill.ReiParticleSkillForge; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/test/SkillTestBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/test/SkillTestBuilder.java index af696ef..72f2a0b 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/test/SkillTestBuilder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/test/SkillTestBuilder.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.test; import com.reiasu.reiparticlesapi.test.SimpleTestGroup; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ClientParticleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ClientParticleHelper.java index ea6dcde..a1e2e3a 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ClientParticleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ClientParticleHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.util; import net.minecraft.core.particles.ParticleOptions; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/DragonRespawnStateUtil.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/DragonRespawnStateUtil.java index d165d68..d9e0a97 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/DragonRespawnStateUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/DragonRespawnStateUtil.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.util; import com.reiasu.reiparticlesapi.ReiParticlesAPI; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ParticleHelper.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ParticleHelper.java index 177bbb3..343fd6e 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ParticleHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/ParticleHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.util; import net.minecraft.core.particles.ParticleOptions; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/SwordFormationHelper.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/SwordFormationHelper.java index e9a7be8..a97a5c8 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/SwordFormationHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/SwordFormationHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.util; import com.reiasu.reiparticlesapi.display.DisplayEntityManager; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/SwordLightEnchantUtil.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/SwordLightEnchantUtil.java index 3188c8a..625cc62 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/SwordLightEnchantUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/SwordLightEnchantUtil.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.util; import com.reiasu.reiparticlesapi.barrages.BarrageOption; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/GraphMathHelper.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/GraphMathHelper.java index 22179dd..7b82c9f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/GraphMathHelper.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/GraphMathHelper.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.util.geom; public final class GraphMathHelper { diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/Math3DUtil.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/Math3DUtil.java index dc58272..5a3fc9f 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/Math3DUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/Math3DUtil.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.util.geom; import java.util.ArrayList; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PhysicsUtil.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PhysicsUtil.java index 3ee5b74..fea1bdb 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PhysicsUtil.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PhysicsUtil.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.util.geom; import net.minecraft.util.Mth; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PointsBuilder.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PointsBuilder.java index fc665c1..6b5ae42 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PointsBuilder.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/PointsBuilder.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.util.geom; import java.util.ArrayList; diff --git a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/RelativeLocation.java b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/RelativeLocation.java index dc110bb..86663d0 100644 --- a/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/RelativeLocation.java +++ b/forge-port/src/main/java/com/reiasu/reiparticleskill/util/geom/RelativeLocation.java @@ -1,5 +1,3 @@ -// SPDX-License-Identifier: LGPL-3.0-only -// Copyright (C) 2025 Reiasu package com.reiasu.reiparticleskill.util.geom; public final class RelativeLocation {