Skip to content

Custom Particle Packs

Shine's Custom workspace exports user-defined PNG particles as .shinepack archives.

This format is separate from Shine visual presets and Shine Packs. Import .shinepack files through Shine > Custom > Custom Particles > Import Pack; Shine does not scan the Minecraft resource-packs folder for them.

Archive Layout

text
example.shinepack
|-- manifest.json
|-- definitions.json
`-- textures/
    `-- falling_petals.png

manifest.json identifies the archive:

json
{
  "schemaVersion": 2,
  "type": "shine-custom-particles"
}

definitions.json contains a shared cap and up to 64 definitions:

json
{
  "schemaVersion": 2,
  "sharedCap": 1200,
  "definitions": [
    {
      "schemaVersion": 2,
      "id": "falling_petals",
      "name": "Falling Petals",
      "enabled": true,
      "behavior": "falling_from_blocks",
      "textureFile": "falling_petals.png",
      "frameCount": 8,
      "frameTicks": 2,
      "size": 0.18,
      "sizeVariation": 0.25,
      "opacity": 0.8,
      "fadeInAnimation": "opacity",
      "fadeOutAnimation": "opacity",
      "tint": 16777215,
      "rotationSpeed": 0.2,
      "density": 3.0,
      "particleCap": 180,
      "spawnRange": 18.0,
      "lifetimeTicks": 160,
      "directionDegrees": 0.0,
      "horizontalSpeed": 0.2,
      "verticalSpeed": -0.18,
      "gravity": 0.35,
      "drift": 0.25,
      "interactionStrength": 0.65,
      "dimension": "any",
      "weather": "any",
      "time": "any",
      "minY": -64,
      "maxY": 320,
      "biomeIds": ["minecraft:cherry_grove"],
      "blockIds": ["minecraft:cherry_leaves"]
    }
  ]
}

Key Fields

The example above shows the complete definition shape. The fields below have fixed choices or format-specific behavior.

FieldValues or Meaning
behaviorambient_air, falling_from_blocks, or interactive_ground.
textureFilePNG filename from the archive's textures/ directory.
frameCount1 to 64; equal-sized frames are stacked vertically in the PNG.
frameTicks1 to 40 ticks per animation frame.
fadeInAnimationnone, opacity, or squish.
fadeOutAnimationnone, opacity, or squish.
dimensionany, overworld, nether, or end.
weatherany, clear, rain, or thunder.
timeany, day, or night.
biomeIdsNamespaced biome IDs; an empty list means every biome.
blockIdsNamespaced block IDs used as emitters or allowed surfaces.
particleCapPer-definition active-particle limit.
sharedCapLimit shared by every custom definition.

Shine sanitizes imported names, IDs, choices, numeric ranges, duplicate IDs, and namespaced registry lists. Imports merge with the user's existing definitions. Texture filename conflicts receive a new imported filename, and definition ID conflicts receive a numeric suffix.

A Shine preset can toggle the custom-particle system with effects.particles.customParticlesEnabled, but custom definitions and textures are not embedded in visual preset JSON. Distribute those assets in a .shinepack.