Skip to content

Particle Configuration

This reference covers all configuration options for both regular and persistent particle effects.

Particle configurations are JSON files stored in:

  • config/glamour/particles/ - Regular particles (manual application)
  • config/glamour/persistent_particles/ - Persistent particles (automatic)

Regular particles are manually applied by players through the GUI or commands.

{
"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
}
}
  • 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"
  • Type: String
  • Required: Yes
  • Description: User-friendly name shown in GUI
  • Example: "Confetti Burst"
  • 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 out
    • AMBIENT - Continuously plays while Pokemon is active
  • Example: "SENDOUT"
  • Type: String
  • Required: Yes
  • Description: Cobblemon snowstorm particle identifier
  • Format: Can be plain name or namespaced
  • Examples:
    • "confetti"
    • "cobblemon:sparkle"
    • "cobblemon:flame"
  • Type: String
  • Required: Yes
  • Description: Category for organization and permissions
  • Common Categories:
    • celebration
    • elemental
    • magical
    • nature
    • cosmic
    • seasonal
  • Example: "celebration"
  • Type: Enum
  • Required: Yes
  • Options (in order):
    • COMMON
    • UNCOMMON
    • RARE
    • EPIC
    • LEGENDARY
    • MYTHICAL
  • Usage: Affects GUI sorting and permission structure
  • Example: "EPIC"
  • Type: Object
  • Required: Yes
  • Description: Particle behavior configuration
  • Type: Integer
  • Default: 100
  • Description: Ticks between particle spawns (20 ticks = 1 second)
  • Range: 1-1000+
  • Example: 40 (2 seconds)
  • Type: Integer
  • Default: 0
  • Description: Delay before first particle spawn
  • Usage: Useful for sendout effects timing
  • Example: 60 (3 seconds)
  • Type: Integer
  • Default: 20
  • Description: How long each particle persists
  • Example: 20 (1 second)

Persistent particles apply automatically based on conditions.

{
"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
}
}
  • Type: String
  • Required: Yes
  • Description: Unique identifier for the persistent particle
  • Example: "shiny_sparkle"
  • Type: String
  • Required: Yes
  • Description: Cobblemon snowstorm particle identifier
  • Example: "cobblemon:sparkle"
  • 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
  • Type: Integer
  • Default: 1
  • Description: Number of particles spawned per interval
  • Range: 1-20
  • Performance: Higher values increase client load
  • Example: 3
  • Type: Float
  • Default: 1.0
  • Description: Spawn radius around center point in blocks
  • Range: 0.1-10.0
  • Example: 1.5
  • 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)
  • 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)
  • Type: Integer
  • Default: 32
  • Description: Max render distance in blocks
  • Range: 4-128
  • Performance: Lower values improve performance
  • Example: 24
  • Type: Boolean
  • Default: false
  • Description: Only render when Pokemon is in player’s view cone
  • Performance: Cheap visibility check, good for performance
  • Example: true
  • Type: Boolean
  • Default: false
  • Description: Only render when player has line-of-sight
  • Performance: Expensive raytrace check, use sparingly
  • Example: false

All condition fields are optional. Omit fields to not filter by that condition.

  • Type: Array of Strings
  • Description: Match specific species
  • Format: Plain name or namespaced ID
  • Example: ["pikachu", "raichu", "cobblemon:mew"]
  • Type: Boolean or null
  • Description: Match shiny status
  • Options:
    • true - Only shiny Pokemon
    • false - Only non-shiny Pokemon
    • null / omitted - Any shiny status
  • Type: Array of Strings
  • Description: Match Pokemon with specific forms
  • Example: ["alolan", "galarian"]
  • Type: Array of Strings
  • Description: Pokemon must have ALL listed aspects
  • Example: ["red_stripe", "large"]
  • Type: Array of Strings
  • Description: Pokemon must have AT LEAST ONE listed aspect
  • Example: ["blue", "green", "red"]
  • Type: Array of Strings
  • Description: Pokemon must NOT have any listed aspects
  • Example: ["yellow"]
  • Type: Array of Strings
  • Description: Pokemon must have at least one listed type
  • Example: ["fire", "dragon"]
  • Type: Object
  • Fields:
    • exact - Exact level match
    • min - Minimum level (inclusive)
    • max - Maximum level (inclusive)
  • Examples:
    "level": { "exact": 100 }
    "level": { "min": 50, "max": 100 }
    "level": { "min": 50 }
  • Type: Array of Strings
  • Description: Match when in specific biomes
  • Format: Minecraft biome IDs
  • Example: ["minecraft:plains", "minecraft:forest"]
  • Type: Array of Strings
  • Description: Match when in specific dimensions
  • Example: ["minecraft:overworld", "minecraft:the_nether"]
  • Type: Array of Strings
  • Options: day, night, sunrise, sunset
  • Example: ["night", "sunset"]
  • Type: Array of Strings
  • Options: clear, rain, thunder
  • Example: ["rain", "thunder"]
  • Type: Boolean or null
  • Description: Match wild Pokemon
  • Example: true
  • Type: Boolean or null
  • Description: Match owned Pokemon
  • Example: true
  • Type: Object
  • Fields:
    • min - Minimum health percentage (0-100)
    • max - Maximum health percentage (0-100)
  • Example: { "min": 0, "max": 25 } (low health)
  • Type: Boolean or null
  • Description: Match Pokemon in battle
  • Example: true
  • Type: Boolean or null
  • Description: Match stationary Pokemon (shoulder-mounted, etc.)
  • Example: false
{
"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
}
}
{
"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
}
}
{
"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"]
}
}
  1. Test in-game: Always test configs after creation
  2. Check logs: Watch server logs for JSON parsing errors
  3. Use reload commands: /particles reload or /persistentparticles reload
  4. Verify particle IDs: Ensure particleResourceId exists in Cobblemon
  5. Check permissions: Verify permission nodes work as expected