Skip to content

Wardrobe Presets

Presets are pre-configured particle effects that players can equip in their wardrobe slots. They define which particle plays, when it triggers, and under what conditions.

Presets are defined in: config/glamour/wardrobe/presets.json

The file contains an array of preset objects:

[
{
"id": "flame_trail",
"displayName": "Flame Trail",
"description": "Leaves a trail of flames as you move",
"slot": "movement",
"effectId": "flame_particle",
"moments": ["WALK", "RUN", "SPRINT"],
"settings": {
"anchor": "SELF",
"intervalTicks": 5,
"durationTicks": 30,
"cooldownTicks": 0,
"chance": 1.0
},
"conditions": null,
"permission": "glamour.wardrobe.preset.flame_trail"
}
]
  • Type: String
  • Required: Yes
  • Description: Unique identifier for the preset
  • Rules: Lowercase, underscores, no spaces
  • Example: "flame_trail"
  • Type: String
  • Required: Yes
  • Description: User-friendly name shown in GUI
  • Example: "Flame Trail"
  • Type: String
  • Required: Yes
  • Description: Explanation of the effect
  • Example: "Leaves a trail of flames as you move"
  • Type: String
  • Required: Yes
  • Description: Which wardrobe slot this preset belongs to
  • Options:
    • "ambient" - Continuous aura effects
    • "movement" - Walking/running effects
    • "jump" - Jump effects
    • "attack" - Combat effects
    • "sneak" - Sneaking effects
  • Example: "movement"
  • Type: String
  • Required: Yes
  • Description: ID of the PlayerParticleConfig to use
  • Note: Must reference an existing player particle effect ID
  • Example: "flame_particle"
  • Type: Array of Strings
  • Required: Yes
  • Description: Gameplay events that trigger this preset
  • See: Complete Moments Reference below
  • Example: ["WALK", "RUN", "SPRINT"]
  • Type: String
  • Required: No
  • Default: glamour.wardrobe.preset.<id>
  • Description: Custom permission node
  • Example: "glamour.wardrobe.preset.flame_trail"
  • Type: Enum
  • Required: Yes
  • Options:
    • "SELF" - Particles spawn at/around the player
    • "TARGET" - Particles spawn at the target location/entity
  • Usage: TARGET is useful for attack/interaction effects
  • Example: "SELF"
  • Type: Integer
  • Required: Yes
  • Description: Ticks between particle spawns (20 ticks = 1 second)
  • Range: 1-1000+
  • Example: 5 (spawn every 0.25 seconds)
  • Type: Integer
  • Required: Yes
  • Description: How long each particle instance lasts
  • Range: 1-1000+
  • Example: 30 (1.5 seconds)
  • Type: Integer
  • Required: Yes
  • Description: Minimum ticks between triggers
  • Usage: Prevents spam, 0 = no cooldown
  • Example: 20 (1 second cooldown)
  • Type: Float
  • Required: Yes
  • Description: Probability of triggering (0.0 to 1.0)
  • Range: 0.0 (never) to 1.0 (always)
  • Example: 0.75 (75% chance)

All condition fields are optional. Use null or omit the conditions object entirely if no conditions are needed.

  • Type: Boolean
  • Description: Only trigger while sneaking
  • Example: true
  • Type: Boolean
  • Description: Only trigger while in water
  • Example: true
  • Type: Array of Strings
  • Description: Only trigger in specific dimensions
  • Example: ["minecraft:overworld", "minecraft:the_nether"]
  • Type: String
  • Description: Only trigger during specific time
  • Options: "DAY", "NIGHT", "DAWN", "DUSK"
  • Example: "NIGHT"
  • Type: Float
  • Description: Minimum health percentage to trigger (0.0-100.0)
  • Example: 50.0 (at least 50% health)
  • Type: Float
  • Description: Maximum health percentage to trigger (0.0-100.0)
  • Example: 25.0 (at most 25% health)

Moments are gameplay events that trigger preset effects.

  • AURA - Continuous aura effect
  • IDLE - When standing still
  • MOVE - Any movement
  • WALK - Walking speed
  • RUN - Running (no sprint)
  • SPRINT - Sprinting
  • SNEAK - Sneaking/crouching
  • JUMP - Jumping
  • FALL - Falling
  • LAND - Landing from a fall
  • GLIDE - Gliding with elytra
  • SWIM - Swimming
  • FLY - Flying (creative/spectator)
  • STRIKE - Attacking/hitting
  • BLOCK - Blocking with shield
  • HURT - Taking damage
  • HEAL - Gaining health
  • CRIT - Critical hit
  • ENTER_COMBAT - Entering combat state
  • LEAVE_COMBAT - Leaving combat state
  • KILL - Killing an entity
  • DEATH - Player death
  • RESPAWN - Player respawn
  • INTERACT - Right-clicking entities/blocks
  • PLACE_BLOCK - Placing blocks
  • MINE - Breaking blocks
  • USE_ITEM - Using items
  • EAT - Eating food
  • DRINK - Drinking potions
  • FISH - Fishing
  • TRADE - Trading with villagers
  • OPEN_CHEST - Opening containers
  • LEVEL_UP - Gaining a level
  • GAIN_XP - Gaining experience points
  • ACHIEVEMENT - Earning an achievement/advancement
  • RAIN - While it’s raining
  • STORM - During thunderstorms
  • SUNLIGHT - In direct sunlight
  • SHADE - In shade
  • UNDERWATER - Underwater
  • HIGH_ALTITUDE - At high Y coordinates
  • UNDERGROUND - Below a certain Y level
  • NETHER - In the Nether
  • END - In the End
  • DAY - During daytime
  • NIGHT - During nighttime
  • DAWN - At dawn
  • DUSK - At dusk
{
"id": "cherry_petals",
"displayName": "Cherry Blossom Trail",
"description": "Cherry blossom petals fall as you walk",
"slot": "movement",
"effectId": "cherry_leaves_particle",
"moments": ["WALK", "RUN"],
"settings": {
"anchor": "SELF",
"intervalTicks": 10,
"durationTicks": 60,
"cooldownTicks": 0,
"chance": 1.0
},
"conditions": null,
"permission": "glamour.wardrobe.preset.cherry_petals"
}
{
"id": "lightning_strike",
"displayName": "Lightning Strike",
"description": "Lightning sparks on critical hits",
"slot": "attack",
"effectId": "lightning_particle",
"moments": ["CRIT"],
"settings": {
"anchor": "TARGET",
"intervalTicks": 1,
"durationTicks": 20,
"cooldownTicks": 40,
"chance": 1.0
},
"conditions": null,
"permission": "glamour.wardrobe.preset.lightning_strike"
}
{
"id": "danger_aura",
"displayName": "Danger Aura",
"description": "Warning aura when health is low",
"slot": "ambient",
"effectId": "red_pulse",
"moments": ["AURA"],
"settings": {
"anchor": "SELF",
"intervalTicks": 20,
"durationTicks": 30,
"cooldownTicks": 0,
"chance": 1.0
},
"conditions": {
"minHealthPercent": 0.0,
"maxHealthPercent": 25.0
},
"permission": "glamour.wardrobe.preset.danger_aura"
}
{
"id": "nether_power",
"displayName": "Nether Power",
"description": "Fiery aura in the Nether dimension",
"slot": "ambient",
"effectId": "soul_fire",
"moments": ["AURA", "WALK"],
"settings": {
"anchor": "SELF",
"intervalTicks": 15,
"durationTicks": 40,
"cooldownTicks": 0,
"chance": 0.8
},
"conditions": {
"allowDimensions": ["minecraft:the_nether"]
},
"permission": "glamour.wardrobe.preset.nether_power"
}
  1. Use reasonable intervals: 5-20 ticks is typical
  2. Add cooldowns: Prevents particle spam
  3. Use chance: Reduces particle density for ambiant effects
  4. Limit particle count: Keep durationTicks reasonable
  1. Match moments to slot: Movement effects for movement moments
  2. Use TARGET anchor: For attack/interaction effects
  3. Add conditions: For specialized/situational effects
  4. Test in-game: Always test visual appearance
  1. Consistent naming: Use descriptive IDs
  2. Group by theme: Fire effects, nature effects, etc.
  3. Document effects: Clear descriptions help players
  4. Permission tiers: Use rarity/quality-based permissions
  • Check permission configuration
  • Verify effectId references an existing player particle
  • Check slot name is valid (ambient, movement, jump, attack, sneak)
  • Reload config with /wardrobe reload
  • Verify moments match the gameplay action
  • Check conditions aren’t blocking trigger
  • Test with chance: 1.0 first
  • Ensure cooldown isn’t too high
  • Reduce particle density (increase intervalTicks)
  • Lower durationTicks
  • Add cooldowns
  • Use conditional triggers