VFX guide
Armaria's particle engine. Trigger compound effects on hit, swing, charge, and cast.
Using presets
@Override
public void postHurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) {
VFXPresets.stormChain(attacker, InteractionHand.MAIN_HAND);
}
Preset map
| Preset | Primary | Secondary 1 | Secondary 2 |
|---|---|---|---|
| impactBurst | FLAME (40) | SMALL_FLAME (20) | CRIT (15) |
| voidTrail | SOUL_FIRE_FLAME (25) | SMALL_FLAME (15) | PORTAL (10) |
| prismWave | ENCHANTED_HIT (35) | ENCHANT (20) | TOTEM_OF_UNDYING (10) |
| stormChain | ELECTRIC_SPARK (30) | CRIT (20) | FLAME (15) |
| chronoShatter | END_ROD (40) | PORTAL (25) | CRIT (20) |
| emberBurst | LAVA (30) | FLAME (25) | SMALL_FLAME (20) |
| frostShards | SNOWFLAKE (35) | ITEM_SNOWBALL (20) | CLOUD (15) |
| dissolveBurst | CAMPFIRE_COSY_SMOKE (30) | LARGE_SMOKE (20) | POOF (15) |
| shockwave | SWEEP_ATTACK (40) | CRIT (30) | ENCHANTED_HIT (20) |
| fresnelAura | ENCHANT (30) | TOTEM_OF_UNDYING (20) | HEART (10) |
| voidRupture | REVERSE_PORTAL (35) | PORTAL (25) | SMALL_FLAME (20) |
| impactShatter | EXPLOSION (30) | CRIT (25) | FLAME (20) |
Performance budget
Each effect spawns 60-100 particles. Add a cooldown to keep the budget sane.
private int lastVfxTick = 0;
private static final int COOLDOWN = 8;
@Override
public void postHurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) {
int currentTick = attacker.level().getGameTime();
if (currentTick - lastVfxTick >= COOLDOWN) {
VFXPresets.stormChain(attacker, InteractionHand.MAIN_HAND);
lastVfxTick = currentTick;
}
}
Server-validated, client-rendered
VFX triggers are server-side via
ServerLivingEntityEvents.AFTER_DAMAGE, then rendered client-side. This prevents cheating and keeps multiplayer consistent.