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
example.shinepack
|-- manifest.json
|-- definitions.json
`-- textures/
`-- falling_petals.pngmanifest.json identifies the archive:
{
"schemaVersion": 2,
"type": "shine-custom-particles"
}definitions.json contains a shared cap and up to 64 definitions:
{
"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.
| Field | Values or Meaning |
|---|---|
behavior | ambient_air, falling_from_blocks, or interactive_ground. |
textureFile | PNG filename from the archive's textures/ directory. |
frameCount | 1 to 64; equal-sized frames are stacked vertically in the PNG. |
frameTicks | 1 to 40 ticks per animation frame. |
fadeInAnimation | none, opacity, or squish. |
fadeOutAnimation | none, opacity, or squish. |
dimension | any, overworld, nether, or end. |
weather | any, clear, rain, or thunder. |
time | any, day, or night. |
biomeIds | Namespaced biome IDs; an empty list means every biome. |
blockIds | Namespaced block IDs used as emitters or allowed surfaces. |
particleCap | Per-definition active-particle limit. |
sharedCap | Limit 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.