Particle Configuration
Particle Configuration
Section titled “Particle Configuration”This reference covers all configuration options for both regular and persistent particle effects.
Configuration Files
Section titled “Configuration Files”Particle configurations are JSON files stored in:
config/glamour/particles/- Regular particles (manual application)config/glamour/persistent_particles/- Persistent particles (automatic)
Regular Particle Configuration
Section titled “Regular Particle Configuration”Regular particles are manually applied by players through the GUI or commands.
Full Schema
Section titled “Full Schema”{ "id": "unique_identifier", "displayName": "Display Name", "description": "User-facing description", "type": "SENDOUT", "particleResourceId": "cobblemon:particle_name", "category": "category_name", "rarity": "COMMON", "settings": { "intervalTicks": 100, "delayTicks": 0, "durationTicks": 20 }}Field Reference
Section titled “Field Reference”- Type: String
- Required: Yes
- Description: Unique identifier for the particle effect
- Rules:
- Must be unique across all particles
- Use lowercase and underscores
- Used in permissions:
glamour.particles.<id>
- Example:
"confetti_burst"
displayName
Section titled “displayName”- Type: String
- Required: Yes
- Description: User-friendly name shown in GUI
- Example:
"Confetti Burst"
description
Section titled “description”- Type: String
- Required: Yes
- Description: Explanation of the particle effect
- Example:
"Celebratory confetti explosion on sendout"
- Type: Enum
- Required: Yes
- Options:
SENDOUT- Plays when Pokemon is sent outAMBIENT- Continuously plays while Pokemon is active
- Example:
"SENDOUT"
particleResourceId
Section titled “particleResourceId”- Type: String
- Required: Yes
- Description: Cobblemon snowstorm particle identifier
- Format: Can be plain name or namespaced
- Examples:
"confetti""cobblemon:sparkle""cobblemon:flame"
category
Section titled “category”- Type: String
- Required: Yes
- Description: Category for organization and permissions
- Common Categories:
celebrationelementalmagicalnaturecosmicseasonal
- Example:
"celebration"
rarity
Section titled “rarity”- Type: Enum
- Required: Yes
- Options (in order):
COMMONUNCOMMONRAREEPICLEGENDARYMYTHICAL
- Usage: Affects GUI sorting and permission structure
- Example:
"EPIC"
settings
Section titled “settings”- Type: Object
- Required: Yes
- Description: Particle behavior configuration
settings.intervalTicks
Section titled “settings.intervalTicks”- Type: Integer
- Default: 100
- Description: Ticks between particle spawns (20 ticks = 1 second)
- Range: 1-1000+
- Example:
40(2 seconds)
settings.delayTicks
Section titled “settings.delayTicks”- Type: Integer
- Default: 0
- Description: Delay before first particle spawn
- Usage: Useful for sendout effects timing
- Example:
60(3 seconds)
settings.durationTicks
Section titled “settings.durationTicks”- Type: Integer
- Default: 20
- Description: How long each particle persists
- Example:
20(1 second)
Persistent Particle Configuration
Section titled “Persistent Particle Configuration”Persistent particles apply automatically based on conditions.
Full Schema
Section titled “Full Schema”{ "id": "unique_identifier", "particleResourceId": "cobblemon:particle_name", "priority": 100, "settings": { "intervalTicks": 40, "durationTicks": 10, "particleCount": 3, "radius": 1.0, "offsetX": 0.0, "offsetY": 0.0, "offsetZ": 0.0, "followEntity": true, "maxDistance": 32, "onlyWhenVisible": false, "requiresLOS": false }, "conditions": { "species": ["pikachu"], "isShiny": true, "forms": [], "aspects": [], "anyAspects": [], "excludeAspects": [], "types": [], "level": { "min": 1, "max": 100 }, "biomes": [], "dimensions": [], "timeOfDay": [], "weather": [], "isWild": null, "isOwned": null, "healthPercent": { "min": 0, "max": 100 }, "isBattling": null, "isStationary": null }}Field Reference
Section titled “Field Reference”- Type: String
- Required: Yes
- Description: Unique identifier for the persistent particle
- Example:
"shiny_sparkle"
particleResourceId
Section titled “particleResourceId”- Type: String
- Required: Yes
- Description: Cobblemon snowstorm particle identifier
- Example:
"cobblemon:sparkle"
priority
Section titled “priority”- Type: Integer
- Required: Yes
- Description: Priority when multiple configs match (higher wins)
- Range: 1-1000+
- Guidelines:
- 1-50: Generic effects
- 51-100: Moderately specific
- 101-200: Very specific
- 201+: Extremely specific overrides
- Example:
150
settings.particleCount
Section titled “settings.particleCount”- Type: Integer
- Default: 1
- Description: Number of particles spawned per interval
- Range: 1-20
- Performance: Higher values increase client load
- Example:
3
settings.radius
Section titled “settings.radius”- Type: Float
- Default: 1.0
- Description: Spawn radius around center point in blocks
- Range: 0.1-10.0
- Example:
1.5
settings.offsetX/Y/Z
Section titled “settings.offsetX/Y/Z”- Type: Float
- Default: 0.0
- Description: Offset from Pokemon center on each axis
- Usage: Position particles above/beside Pokemon
- Example:
"offsetY": 2.0(2 blocks above)
settings.followEntity
Section titled “settings.followEntity”- Type: Boolean
- Default: true
- Description: Whether particles follow Pokemon or spawn at world position
- Options:
true- Particles attached to entity (move with Pokemon)false- Particles spawn at world coordinates (stay in place)
settings.maxDistance
Section titled “settings.maxDistance”- Type: Integer
- Default: 32
- Description: Max render distance in blocks
- Range: 4-128
- Performance: Lower values improve performance
- Example:
24
settings.onlyWhenVisible
Section titled “settings.onlyWhenVisible”- Type: Boolean
- Default: false
- Description: Only render when Pokemon is in player’s view cone
- Performance: Cheap visibility check, good for performance
- Example:
true
settings.requiresLOS
Section titled “settings.requiresLOS”- Type: Boolean
- Default: false
- Description: Only render when player has line-of-sight
- Performance: Expensive raytrace check, use sparingly
- Example:
false
Conditions Reference
Section titled “Conditions Reference”All condition fields are optional. Omit fields to not filter by that condition.
conditions.species
Section titled “conditions.species”- Type: Array of Strings
- Description: Match specific species
- Format: Plain name or namespaced ID
- Example:
["pikachu", "raichu", "cobblemon:mew"]
conditions.isShiny
Section titled “conditions.isShiny”- Type: Boolean or null
- Description: Match shiny status
- Options:
true- Only shiny Pokemonfalse- Only non-shiny Pokemonnull/ omitted - Any shiny status
conditions.forms
Section titled “conditions.forms”- Type: Array of Strings
- Description: Match Pokemon with specific forms
- Example:
["alolan", "galarian"]
conditions.aspects
Section titled “conditions.aspects”- Type: Array of Strings
- Description: Pokemon must have ALL listed aspects
- Example:
["red_stripe", "large"]
conditions.anyAspects
Section titled “conditions.anyAspects”- Type: Array of Strings
- Description: Pokemon must have AT LEAST ONE listed aspect
- Example:
["blue", "green", "red"]
conditions.excludeAspects
Section titled “conditions.excludeAspects”- Type: Array of Strings
- Description: Pokemon must NOT have any listed aspects
- Example:
["yellow"]
conditions.types
Section titled “conditions.types”- Type: Array of Strings
- Description: Pokemon must have at least one listed type
- Example:
["fire", "dragon"]
conditions.level
Section titled “conditions.level”- Type: Object
- Fields:
exact- Exact level matchmin- Minimum level (inclusive)max- Maximum level (inclusive)
- Examples:
"level": { "exact": 100 }"level": { "min": 50, "max": 100 }"level": { "min": 50 }
conditions.biomes
Section titled “conditions.biomes”- Type: Array of Strings
- Description: Match when in specific biomes
- Format: Minecraft biome IDs
- Example:
["minecraft:plains", "minecraft:forest"]
conditions.dimensions
Section titled “conditions.dimensions”- Type: Array of Strings
- Description: Match when in specific dimensions
- Example:
["minecraft:overworld", "minecraft:the_nether"]
conditions.timeOfDay
Section titled “conditions.timeOfDay”- Type: Array of Strings
- Options:
day,night,sunrise,sunset - Example:
["night", "sunset"]
conditions.weather
Section titled “conditions.weather”- Type: Array of Strings
- Options:
clear,rain,thunder - Example:
["rain", "thunder"]
conditions.isWild
Section titled “conditions.isWild”- Type: Boolean or null
- Description: Match wild Pokemon
- Example:
true
conditions.isOwned
Section titled “conditions.isOwned”- Type: Boolean or null
- Description: Match owned Pokemon
- Example:
true
conditions.healthPercent
Section titled “conditions.healthPercent”- Type: Object
- Fields:
min- Minimum health percentage (0-100)max- Maximum health percentage (0-100)
- Example:
{ "min": 0, "max": 25 }(low health)
conditions.isBattling
Section titled “conditions.isBattling”- Type: Boolean or null
- Description: Match Pokemon in battle
- Example:
true
conditions.isStationary
Section titled “conditions.isStationary”- Type: Boolean or null
- Description: Match stationary Pokemon (shoulder-mounted, etc.)
- Example:
false
Complete Examples
Section titled “Complete Examples”Regular Particle: Epic Sendout
Section titled “Regular Particle: Epic Sendout”{ "id": "dragon_ascent", "displayName": "Dragon Ascent", "description": "Powerful dragon energy erupts as your Pokemon appears", "type": "SENDOUT", "particleResourceId": "cobblemon:dragon_breath", "category": "elemental", "rarity": "EPIC", "settings": { "intervalTicks": 100, "delayTicks": 40, "durationTicks": 30 }}Persistent Particle: Shiny Legendary
Section titled “Persistent Particle: Shiny Legendary”{ "id": "shiny_legendary_aura", "particleResourceId": "cobblemon:cosmic_sparkle", "priority": 200, "settings": { "intervalTicks": 20, "durationTicks": 20, "particleCount": 5, "radius": 2.5, "offsetY": 1.0, "followEntity": true, "maxDistance": 64, "onlyWhenVisible": true, "requiresLOS": false }, "conditions": { "species": ["mewtwo", "lugia", "rayquaza"], "isShiny": true }}Persistent Particle: Fire Type in Nether
Section titled “Persistent Particle: Fire Type in Nether”{ "id": "fire_nether_boost", "particleResourceId": "cobblemon:flame", "priority": 80, "settings": { "intervalTicks": 30, "durationTicks": 15, "particleCount": 3, "radius": 1.2, "followEntity": true, "maxDistance": 32, "onlyWhenVisible": false }, "conditions": { "types": ["fire"], "dimensions": ["minecraft:the_nether"] }}Validation Tips
Section titled “Validation Tips”- Test in-game: Always test configs after creation
- Check logs: Watch server logs for JSON parsing errors
- Use reload commands:
/particles reloador/persistentparticles reload - Verify particle IDs: Ensure
particleResourceIdexists in Cobblemon - Check permissions: Verify permission nodes work as expected