Stellar Aura
Stellar Aura is a single server-side NeoForge 1.21.1 mod that replaces the legacy EntityParticles 3.1.1 + ParticlesAddon 1.1.4 stack. It targets Pixelmon 9.3.16, requires Java 21, and uses only vanilla particle packets, so players do not install a companion client mod.
The old combination supplied persistent effects, aura/remover items, commands, 27 fixed aura definitions, a 1-in-8192 Pixelmon aura roll, weighted Pixelmon spec mutations, spawn announcements, and capture announcements. Stellar Aura preserves those behaviors and identities while moving storage, commands, particles, permissions, item data, and Pixelmon events to current APIs.
Included catalog
The first launch creates 55 editable, working definitions under config/StellarAura/auras/premade/. They are never overwritten.
Legacy identities:
american, angelic, attract, blizzard, christmas, demonic, draconic, easter, eternal, explosion, fire, ghoul, grass, hypnotic, poop, portal, rhythm, sandstorm, shadow_form, smokey, spellbound, toxic, twilight, volcanic, water, yin_yang, zombie.
New identities:
aurora, celestial, cosmic, galaxy, nebula, solar, lunar, void, ender, oceanic, storm, thunderlord, nature, sakura, fairy, royal, phoenix, dragon_soul, frostfire, blood_moon, cyber, rainbow, bee, sculk, emerald, infernal, prism, serenity.
Every preset is a normal config file. It is not privileged or hardcoded at render time, so an admin can clone it, replace every layer, or disable it.
What admins can configure
Aura definitions are .yml or .yaml files anywhere below config/StellarAura/auras/. The generated config/StellarAura/examples/kitchen-sink-aura.yml documents every field.
Each aura supports:
- an ID, enabled state, formatted or gradient display name, description, categories, and optional permission;
- arbitrary item material, name, lore, glint, custom model data, consumption, cooldown, owner checks, hand policy, and
replace/add/togglebehavior; - generic living entities, all entities, Pixelmon-only targets, players, wild/owned Pokémon, exact entity allow/deny globs, scoreboard-tag requirements, invisibility behavior, and glowing;
- multiple simultaneous auras per entity and an arbitrary number of named visual layers, bounded by global safety limits;
- per-layer particle registry ID, geometry, count, interval, phase, anchor, XYZ offset/scale, radius, height, turns, rotation, tilt, thickness, yaw/pitch following, mirroring, entity-size scaling, and long-distance packets;
- bob, pulse, jitter, velocity, spread, speed, RGB/transition colors, dust size, block/item payloads, sculk roll, shriek delay, viewer mode, and view distance;
- moving/stationary, grounded/airborne, in-water/out-of-water, and alive conditions;
- automatic Pixelmon assignment weight and chance; Pixelmon match/apply specs; dimension, biome, height, time, weather, moon phase, and light filters;
- apply/remove/random-spawn/capture command lists, player messages, sounds, volume, pitch, and placeholders.
Supported shapes:
point, cloud, rain, ring, halo, disc, sphere, sphere_shell, spiral, helix, double_helix, dna, vortex, torus, crown, heart, wings, rune, pentagram, star, cube, cylinder, cone, fountain, comet, trail, wave, orbit, atom, galaxy, lotus, butterfly, snowflake, phoenix, lightning, constellation, beam, burst, and infinity.
Vanilla simple particles work by registry ID. dust, dust_color_transition, block, block_marker, falling_dust, item, entity_effect, sculk_charge, and shriek also consume their corresponding payload fields.
Persistence
Generic entities use a serialized NeoForge entity attachment. Pokémon also store the same state in Pokemon#getPersistentData, so auras survive capture, party/PC storage, server restarts, and later send-out. State is immutable and may contain multiple deduplicated aura IDs plus actor, timestamp, and source metadata.
Unknown IDs remain stored by default. This lets an admin temporarily remove or rename a definition without destructively erasing entity data.
Automatic Pixelmon auras
The default random roll remains 1 in 8192. The original addon’s weighted spec mutations are preserved in random-spawns.pixelmon-modifiers and are fully editable. Eligible aura selection is weighted and can be constrained per definition.
Pixelmon 9.3.16 gender specifications use female, male, or none. Stellar Aura 1.0.1 also expands the legacy g:f, g:m, and g:n forms automatically for existing configs. Every configured match/apply specification is exception-contained: Pixelmon parser failures are logged once and skipped instead of being allowed to crash the server tick thread.
Randomly assigned auras are written to both the world entity and its underlying Pokémon before capture. Capture and send-out events therefore use one consistent state rather than trying to match replacement entity UUIDs.
Performance controls
The renderer tracks only aura-bearing entities and periodically repairs its index. It does not scan every entity every render tick.
Global controls include render and rescan intervals, view distance, tracked entities per level, rendered entities per tick, particle packets per tick, layers per aura, and auras per entity. Distance and viewer filters run before packet creation. Adaptive throttling scales both packet and entity budgets down when the server’s smoothed tick time exceeds the configured threshold.
/aura stats exposes current tracking, preview, packet, render, and throttle counters.
Commands
Aliases are /aura, /auras, /stellaraura, and /entityparticles.
| Command | Purpose |
|---|---|
/aura list [page] |
List enabled IDs. |
/aura info <aura> |
Inspect catalog metadata. |
/aura give <players> <aura> [amount] |
Give configured applicator items. |
/aura give-remover <players> [amount] |
Give remover items. |
/aura set <entities> <aura> [replace|add|toggle] |
Assign an aura with selectors. |
/aura random <entities> |
Assign a compatible random aura. |
/aura remove <entities> [aura|all] |
Remove one or all assignments. |
/aura copy <source> <targets> |
Copy the complete stacked state. |
/aura inspect <entity> |
Show current IDs. |
/aura preview <aura> [seconds] |
Non-persistent preview on the command player. |
/aura reload |
Atomically reload global, message, and aura files and rebuild tracking. |
/aura validate |
Show schema/registry warnings. |
/aura stats |
Show renderer counters and throttling. |
Dynamic Brigadier suggestions are generated from the current catalog.
Permissions
Core nodes are:
stellar_aura.command.list,stellar_aura.command.info,stellar_aura.item.use— everyone by default;stellar_aura.command.give,.set,.remove,.random,.copy,.inspect,.preview,.reload,.validate,.stats— operators by default.
An aura’s permission is registered as a NeoForge permission node and can be managed by a compatible provider such as LuckPerms. New node strings require a restart so NeoForge can gather them; all other edits support live reload.
Placeholders
Commands and messages support %player%, %player_uuid%, %entity%, %entity_uuid%, %entity_type%, %aura%, %display%, %world%, %x%, %y%, %z%, %biome%, %pokemon%, and %pokemon_uuid% where available.
Commands run from the server’s suppressed-output console source. Definition messages are sent to the applying player. Built-in spawn and capture messages broadcast when enabled.