PARTICLES DOCUMENTATION
Version: 1.9.0.10

Index

Component Concept

The particle system is component based. What this means is that particle effects are composed via a set of components. In order for an effect to do something, you add a component that handles that aspect of the effect. For example, an emitter usually needs to have rules for its lifetime, thus the effect should have one or more lifetime components that handle lifetime duties for the emitter and emitted particles.

The idea is that new components can be added later, and one can combine components (where it makes sense) to get different behaviors. A particle might have a Dynamic component for moving around, and a Collision component for handling interaction with the terrain, for example.

Think of components as telling the particle system what you want the emitter or particle to do, rather than exposing a list of particle parameters and wrangling of those parameters to get the desired behavior.

Namespacing

All particle effects should be namespaced (in their name).

Namespacing involves adding a 'name:' prefix on the effect tag.

Regular Minecraft will use the 'minecraft: prefix. See the examples for example names.

MoLang integration

Where it makes sense, any field can use a MoLang expression. MoLang expressions are strings, and are defined in the MoLang documentation. The particle system uses some special MoLang variables that particle MoLang expressions can use. Additionally, custom MoLang paramaters can be set in various ways and used in MoLang expressions in effects.

Parameters

Name Description
variable.emitterage Age since the current loop started for the emitter
variable.emitterlifetime How long the current loop lasts for the emitter
variable.emitterrandom1 A random from 0.0 to 1.0 that is constant for the current loop of the emitter
variable.emitterrandom2 Another random from 0.0 to 1.0 that is constant for the current loop of the emitter
variable.emitterrandom3 A third random from 0.0 to 1.0 that is constant for the current loop of the emitter
variable.emitterrandom4 A fourth random from 0.0 to 1.0 that is constant for the current loop of the emitter
variable.particleage How long the particle has lived
variable.particlelifetime How long the particle lives for
variable.particlerandom1 A random from 0.0 to 1.0 that is constant for the lifetime of the particle
variable.particlerandom2 Another random from 0.0 to 1.0 that is constant for the lifetime of the particle
variable.particlerandom3 A third random from 0.0 to 1.0 that is constant for the lifetime of the particle
variable.particlerandom4 A fourth random from 0.0 to 1.0 that is constant for the lifetime of the particle



Basic Structure Overview

Particle effects consist of basic render parameters, and a set of components. Components can be placed in any order.
Outline:
{
  "format_version": "1.10.0",
  "particle_effect": {
    "description": {
      "identifier": <string>, // e.g. "minecraft:test_effect", this is the name the particle emitter is referred to as
      "basic_render_parameters": {
          "material": <string> // Minecraft material to use for emitter
          "texture": <string> // Minecraft texture to use for emitter
      }
    },
    "components": 
      // emission rate components

      // emission lifetime components

      // emission shape components, or the shape of the effect as defined
      // by particle emission position and directions

      // emitter local space components

      // components that control initial state of particles

      // components that control/direct motion of particles

      // components that affect how the particle is drawn

      // components that affect particle lifetime
    }
  }
}


In Detail

Outline:

{
  // required for particle .json is the format version
  // and the particle's scope.
  "format_version": "1.8.0",
  "particles": {
    // Overall effect.  This name is the name used to reference the particle
    // from script, slash command, entities, or anywhere else that reference a particle effect
    "minecraft:my_particle_effect": {

        // Basic render parameters are properties like the texture used, or the material used.
        // All particles require a material to render, and a texture to draw. 
        "basic_render_parameters": {
            "material": <string>
            "texture": <string>
        },

        // this section describes curves that can be used later by components
        // Curves are interpolation values, with inputs from 0 to 1, and
        // outputs based on the curve
        //
        // the result of the curve is a molang variable of the same name
        // that can be referenced in molang in components
        //
        // each frame for each particle, the curves are evaluated
        // and the result is placed in a molang variable of the name of the
        // curve
        "curves": {
          "molangvar": {
            // type can be "linear", "bezier", or "catmull_rom"
            "type": type, 

            // control nodes for curve.  These are assumed to be equally
            // spaced, e.g. first node is at input value 0, second at 0.25, etc
            "nodes": [<float/molang>, <float/molang>, <float/molang>, <float/molang>],

            // what is the input value to use
            "input": <float/molang>,

            // what is the range the input is mapped onto
            // between 0 and this value
            "horizontal_range": <float/molang>
          }
        },

       "components: {
            /////////////////////////////////////////////////////////////////////
            // Emitter related components
            // these components primarily affect the emitter bevahior

            // emitter initial state components set up the emitter with
            // particular properties

            // emitter rate components control when particles get emitted
            // these will be run every frame for the emitter to determine if any 
            // particles need to be spawned
 
            // emitter lifetime components control the lifetime of the emitter
            // and the "enabled/disabled" state of the emitter.
            // Emitters can only spawn particles if enabled.
 
            // emitter shapecomponents control where a particle gets emitted
            // and initial shape-driven state such as particle direction
 
            // emitter local space component
            // this component specifies whether entity-based emitters 
            // simulate in local or global space

            /////////////////////////////////////////////////////////////////////
            // Particle related components
            // these components primarily affect the particle behavior
  
            // particle initial condition components control what the initial state
            // of the particles is, such as initial speed, rotation, etc.
            // These are run once at particle creation

            // particle motion components control what happens to the particle
            // on frames after creation, such as it's position (for
            // a parametric particle), drag/acceleration (for a dynamic
            // particle), etc.
            // These are run once per frame per particle

            // particle appearance components control how the particle is rendered 
            // such as what UV coortinates to use, size of the particle,
            // billboard orientation, color tinting, etc.
            // These are run once per frame for visible particles
 
            // particle lifetime components handle when the particle expires
        }
    }
  }
}



Current Component List

For fields in these components, the following shorthand is used:
<float> - field takes a floating point input
<float/molang> - field takes a floating point input, or a MoLang expression
<default:val> - specifies the default value used if field isn't specified
<bool> - "true" or "false"
<string> - a string ("this is a string"
<default> - not a part of the particular line, this just says what this field defaults to if not specified


Emitter Components

Emitter Lifetime Components

Emitter Lifetime Expression component

Emitter will turn 'on' when the activation expression is non-zero, and will turn 'off' when it's zero. This is useful for situations like driving an entity-attached emitter from an actor variable.

"minecraft:emitter_lifetime_expression": {
    // When the expression is non-zero, the emitter will emit particles.
    // Evaluated every frame
    "activation_expression": <float/molang> <default:1>

    // Emitter will expire if the expression is non-zero.
    // Evaluated every frame
    "expiration_expression": <float/molang> <default:0>
}


Emitter Lifetime Looping component

Emitter will loop until it is removed.

"minecraft:emitter_lifetime_looping": {

    // emitter will emit particles for this time per loop
    // evaluated once per particle emitter loop
    "active_time": <float/molang> <default:10>

    // emitter will pause emitting particles for this time per loop
    // evaluated once per particle emitter loop
    "sleep_time": <float/molang> <default:0>
}


Emitter Lifetime Once component

Emitter will execute once, and once the lifetime ends or the number of particles allowed to emit have emitted, the emitter expires.

"minecraft:emitter_lifetime_once": {
    // how long the particles emit for
    // evaluated once
    "active_time": <float/molang> <default:10>
}




Emitter Rate Components

Emitter Rate Instant component

All particles come out at once, then no more unless the emitter loops.

"minecraft:emitter_rate_instant": {
    // this many particles are emitted at once
    // evaluated once per particle emitter loop
    "num_particles": <float/molang> <default:10>
}


Emitter Rate Manual component

Particle emission will occur only when the emitter is told to emit via the game itself. This is mostly used by legacy particle effects.

"minecraft:emitter_rate_manual": {
    // evaluated once per particle emitted
    "max_particles": <float/molang> <default:50>
}


Emitter Rate Steady component

Particles come out at a steady or MoLang rate over time.

"minecraft:emitter_rate_steady": {
    // how often a particle is emitted, in particles/sec
    // evaluated once per particle emitted
    "spawn_rate": <float/molang> <default:1>

    // maximum number of particles that can be active at once for this emitter
    // evaluated once per particle emitter loop
    "max_particles": <float/molang> <default:50>
}




Emitter Shape Components

Shape controls both where the particles are emitted from and the initial direction of the particles.

Emitter Shape Custom component

All particles are emitted based on a specified set of MoLang expressions.

"minecraft:emitter_shape_custom": {
    // specifies the offset from the emitter to emit the particles
    // evaluated once per particle emitted
    "offset": [<float/molang>, <float/molang>, <float/molang>] <default:[0, 0, 0]>

    // specifies the direciton for the particle
    // evaluated once per particle emitted
    "direction": [<float/molang>, <float/molang>, <float/molang>] <default:[0, 0, 0]    
}


Emitter Shape Entity-AABB component

All particles come out of the axis-aligned bounding box (AABB) for the entity the emitter is attached to, or the emitter point if no entity.

"minecraft:emitter_shape_entity_aabb": {
    // evaluated once per particle emitted
    "direction": [<float/molang>, <float/molang>, <float/molang>] <default:[0, 0, 0]    
}


Emitter Shape Point component

All particles come out of a point offset from the emitter.

"minecraft:emitter_shape_point": {
    // specifies the offset from the emitter to emit the particles
    // evaluated once per particle emitted
    "offset": [<float/molang>, <float/molang>, <float/molang>] <default:[0, 0, 0]>

    // specifies the direciton of particles.  
    // evaluated once per particle emitted
    "direction": [<float/molang>, <float/molang>, <float/molang>]
}


Emitter Shape Sphere component

All particles come out of a sphere offset from the emitter.

"minecraft:emitter_shape_sphere": {
    // specifies the offset from the emitter to emit the particles
    // evaluated once per particle emitted
    "offset": [<float/molang>, <float/molang>, <float/molang>] <default:[0, 0, 0]>

    // sphere radius
    // evaluated once per particle emitted
    "radius": <float/molang> <default:1>

    // emit only from the surface of the sphere
    "surface_only": <bool> <default:false>

    // specifies the direciton of particles.  Defaults to "outwards"
    "direction": "inwards" // particle direction towards center of sphere
    "direction": "outwards" // particle direction away from center of sphere
    // evaluated once per particle emitted
    "direction": [<float/molang>, <float/molang>, <float/molang>]
}




Initial State Components

Emitter Local Space component

This component specifies the frame of reference of the emitter. Applies only when the emitter is attached to an entity. When 'position' is true, the particles will simulate in entity space, otherwise they will simulate in world space. Rotation works the same way for rotation. Default is false for both, which makes the particles emit relative to the emitter, then simulate independently from the entity. Note that rotation = true and position = false is an invalid option.

"minecraft:emitter_local_space": {
    "position": <bool>
    "rotation": <bool>
}






Particle Components

Particle Appearance Components

Particle Appearance Billboard component

This component tells the particle system to render the particle as a billboard, a rectangle in the world facing a particluar direction.

"minecraft:particle_appearance_billboard": {
    // specifies the x/y size of the billboard
    // evaluated every frame
    "size": [<float/molang>, <float/molang>],

    // used to orient the billboard.  Options are:
    // "rotate_xyz" - aligned to the camera, perpendicular to the view axis
    // "rotate_y" -aligned to camera, but rotating around world y axis
    // "lookat_xyz" - aimed at the camera, biased towards world y up
    // "lookat_y" - aimed at the camera, but rotating around world y axis
    // "direction" - billboard is aligned perpendicular to the direction vector, 
    //    e.g. a direction of [0, 1, 0] would have the particle facing upwards
    "face_camera_mode": <string>

    // specifies the UVs for the particle.  
    "uv": {
        // specifies the assumed texture width/height
        // defaults to 1
        // when set to 1, UV's work just like normalized UV's
		// when set to the texture width/height, this works like texels
        "texturewidth": <int>,
        "textureheight": <int>,

        // Assuming the specified texture width and height, use these 
        // uv coordinates.  
        // evaluated every frame
        "uv": [<float/molang>, <float/molang>],
        "uv_size": [<float/molang>, <float/molang>],

        // alternate way via specifying a flipbook animation
		// a flipbook animation uses pieces of the texture to animate, by stepping over time from one 
		// "frame" to another
        "flipbook": {
            "base_UV": [ <float/molang>, <float/molang> ], // upper-left corner of starting UV patch
            "size_UV": [ <float>, <float> ], // size of UV patch
            "step_UV": [ <float>, <float> ], // how far to move the UV patch each frame
            "frames_per_second": <float>, // default frames per second
            "max_frame": <float/molang>, // maximum frame number, with first frame being frame 1
            "stretch_to_lifetime": <bool>, // optional, adjust fps to match lifetime of particle. default=false
            "loop":  <bool> // optional, makes the animation loop when it reaches the end? default=false
        }
    }
}


Particle Appearance Lighting

When this component exists, particle will be tinted by local lighting conditions in-game

"minecraft:particle_appearance_lighting": {}


Particle Appearance Tinging component

Color tinting of the particle

// color fields are special, they can be either an RGB, or a "#RRGGBB"
// field (or RGBA or "AARRGGBB").  If RGB(A), the channels are
// from 0 to 1.  If the string is "#RRGGBB" or "#AARRGGBB", the values are
// hex from 00 to ff.
//
// this pseudo-type will be denoted by <color>
"minecraft:particle_appearance_tinting": {
    // interpolation based color
    "color": {
        // an array of colors
        // it is assumed that the colors are equally spaced for interpolation
        // and that the range of the color interpolation values are 0 to 1
        //
        // for example, a 3 color "color" field with an interpolant value
        // of 0.5 would pick the second color
        "gradient": [ <color>, <color>, ...],
        "interpolant": <float/molang> // hint: use a curve here!
    }

    // directly set the color
    "color": <color>
}




Particle Initial State Components

Particle Initial Speed component

Starts the particle with a specified speed, using the direction specified by the emitter shape.

// evaluated once
"minecraft:particle_initial_speed": <float/molang> <default:0>


Particle Initial State component

Starts the particle with a specified orientation and rotation rate.

"minecraft:particle_initial_spin": {
    // specifies the initial rotation in degrees
    // evaluated once
    "rotation": <float/molang> <default:0>

    // specifies the spin rate in degrees/second
    // evaluated once
    "rotation_rate": <float/molang> <default:0>
}




Particle Lifetime Components

Particle Expire If In Blocks component

Particles expire when in a block of the type in the list. Note: this component can exist alongside particle_lifetime_expression.

"minecraft:particle_expire_if_in_blocks" [
    // minecraft block names, e.g. 'minecraft:water', 'minecraft:air'
    // these are typically the same name as in the /setblock command
    // except for the minecraft: prefix
    "blockname1",
    "blockname2", 
    ...
],


Particle Expire If Not In Blocks component

Particles expire when in a block of the type not in the list. Note: this component can exist alongside particle_lifetime_expression.

"minecraft:particle_expire_if_not_in_blocks" [
    // minecraft block names, e.g. 'minecraft:water', 'minecraft:air'
    // these are typically the same name as in the /setblock command
    // except for the minecraft: prefix
    "blockname1",
    "blockname2", 
    ...
],


Particle Lifetime Expression component

Standard lifetime component. These expressions control the lifetime of the particle.

"minecraft:particle_lifetime_expression": {
    // this expression makes the particle expire when true (non-zero)
    // The float/expr is evaluated once per particle
    // evaluated every frame
    "expiration_expression": <float/molang> <default:0>
 
	// alternate way to express lifetime
    // particle will expire after this much time
    // evaluated once
    "max_lifetime": <float/molang>
},




Particle Motion Components

Particle Motion Collision component

This component enables collisions between the terrain and the particle. Collision detection in Minecraft consists of detecting an intersection, moving to a nearby non-intersecting point for the particle (if possible), and setting its direction to not be aimed towards the collision (usually perpendicular to the collision surface). Note that if this component doesn't exist, there will be no collision.

"minecraft:particle_motion_collision": {
    // enables collision when true/non-zero.
    // evaluated every frame
    "enabled": <bool/molang> <default:true>

    // alters the speed of the particle when it has collided
    // useful for emulating friction/drag when colliding, e.g a particle
    // that hits the ground would slow to a stop.
    // This drag slows down the particle by this amount in blocks/sec
    // when in contact
    "collision_drag": <float>

    // used for bouncing/not-bouncing
    // Set to 0.0 to not bounce, 1.0 to bounce back up to original height
    // and in-between to lose speed after bouncing.  Set to >1.0 to gain height each bounce
    "coefficient_of_restitution": <float>

    // used to minimize interpenetration of particles with the environment
    // note that this must be less than or equal to 1/2 block
    "collision_radius": <float>
}


Particle Motion Dynamic component

This component specifies the dynamic properties of the particle, from a simulation standpoint what forces act upon the particle? These dynamics alter the velocity of the particle, which is a combination of the direction of the particle and the speed. Particle direction will always be in the direction of the velocity of the particle.

"minecraft:particle_motion_dynamic": {
    // the linear acceleration applied to the particle, defaults to [0, 0, 0].
    // Units are blocks/sec/sec
    // An example would be gravity which is [0, -9.8, 0]
    // evaluated every frame
    "linear_acceleration": [<float/molang>, <float/molang>, <float/molang>],

    // using the equation:
    // acceleration = -linear_drag_coefficient*velocity
    // where velocity is the current direction times speed
    // Think of this as air-drag.  The higher the value, the more drag
    // evaluated every frame
    "linear_drag_coefficient": <float/molang> <default:0>

    // acceleration applies to the rotation speed of the particle
    // think of a disc spinning up or a smoke puff that starts rotating
    // but slows down over time
    // evaluated every frame
    // acceleration is in degrees/sec/sec
    "rotation_acceleration" <float/molang> <default:0>

    // drag applied to retard rotation
    // equation is rotation_acceleration += -rotation_rate*rotation_drag_coefficient
    // useful to slow a rotation, or to limit the rotation acceleration
    // Think of a disc that speeds up (acceleration) 
    // but reaches a terminal speed (drag)
    // Another use is if you have a particle growing in size, having
    // the rotation slow down due to drag can add "weight" to the particle's
    // motion
    "rotation_drag_coefficient" <float/molang> <default:0>
}


Particle Motion Parametric component

This component directly controls the particle. Note that this component won't work for either manually-emitted particles, or entity-based particle emitters that aren't in local space.

"minecraft:particle_motion_parametric": {
    // directly set the position relative to the emitter. 
    // E.g. a spiral might be:
    // "relative_position": ["Math.cos(Params.LifeTime)", 1.0, 
    //                       "Math.sin(Params.Lifetime)"]
    // defaults to [0, 0, 0]
    // evaluated every frame
    "relative_position": [<float/molang> <float/molang> <float/molang>]

    // directly set the 3d direction of the particle
    // doesn't affect direction if not specified
    // evaluated every frame
    "direction": [<float/molang> <float/molang> <float/molang]

    // directly set the rotation of the particle
    // evaluated every frame
    "rotation": <float/molang> <default:0>
}}








Examples

Flame particle

This particle is the little flame that appears on torches and furnaces to indicate fire. It is a simple particle, consisting of a non-moving flame, with some variations. Note the use of MoLang to create variations in the particle behavior.

In addition, the use of texturewidth/height in the UV section of the billboard component allows referencing of UVs via texels:

{
  "format_version": "1.8.0",
  "particles": {
    "minecraft:basic_flame_particle": {
      "basic_render_parameters": {
        "material": "particles_alpha",
        "texture": "textures/particle/particles"
      },
      "components": {
        "minecraft:emitter_rate_instant": {
          "num_particles": 1
        },
        "minecraft:emitter_lifetime_once": {
          "active_time": 0
        },
        "minecraft:emitter_shape_sphere": {
          "radius": 0.025,
          "direction": [ 0, 0, 0 ]
        },
        "minecraft:particle_lifetime_expression": {
          "max_lifetime": "Math.random(0.6, 2.0) "
		},
		"minecraft:particle_appearance_billboard": {
			"size": [
				"(0.1 + variable.ParticleRandom1*0.1) - (0.1 * variable.ParticleAge)",
					"(0.1 + variable.ParticleRandom1*0.1) - (0.1 * variable.ParticleAge)"
			],
				"facing_camera_mode" : "lookat_xyz",
					"uv" : {
					"texturewidth": 128,
						"textureheight" : 128,
						"uv" : [0, 24],
						"uv_size" : [8, 8]
				}
		}
	  }
	}
  }
}



Smoke particle

This particle is the general-purpose smoke puff. It appears on torches, furnaces, Blazes, etc. It is a simple particle with an upward motion consisting of an upwards acceleration tempered by drag.

The main feature of this particle different from the flame particle is the flipbook texture animation. See the details in the particle below, but the effect uses a flipbook subpart of the billboard appearance component to drive uv coordinates from frame to frame over time.

In addition, the use of texturewidth/height in the UV section of the billboard component allows referencing of UVs via texels for the flipbook:

{
  "format_version": "1.8.0",
  "particles": {
    "minecraft:basic_smoke_particle": {
      "basic_render_parameters": {
        "material": "particles_alpha",
        "texture": "textures/particle/particles"
      },
      "components": {
        "minecraft:emitter_rate_instant": {
          "num_particles": 1
        },
        "minecraft:emitter_lifetime_once": {
          "active_time": 0
        },
        "minecraft:emitter_shape_custom": {
          "offset": [ 0, 0, 0 ],
          "direction": [ "Math.random(-0.1, 0.1)", 1.0, "Math.random(-0.1, 0.1)" ]
		},
		"minecraft:particle_initial_speed": 1.0,
			"minecraft:particle_lifetime_expression" : {
			"max_lifetime": "Math.random(0.4, 1.4)"
		},
			"minecraft:particle_motion_dynamic" : {
				"linear_acceleration": [0, 0.4, 0]
			},
				"minecraft:particle_appearance_billboard" : {
					"size": [0.1, 0.1],
						"facing_camera_mode" : "lookat_xyz",
						"uv" : {
						"texturewidth": 128,
							"textureheight" : 128,
							"flipbook" : {
							"base_UV": [56, 0],
								"size_UV" : [8, 8],
								"step_UV" : [-8, 0],
								"frames_per_second" : 8,
								"max_frame" : 8,
								"stretch_to_lifetime" : true,
								"loop" : false
						}
					}
				},
					"minecraft:particle_appearance_tinting": {
					"color": ["variable.ParticleRandom1*0.5", "variable.ParticleRandom1*0.5", "variable.ParticleRandom1*0.5", 1.0]
				},
					"minecraft:particle_appearance_lighting" : {}
	  }
	}
  }
}



Mob Flame effect

The mob flame effect is used by the Blaze when it's charging up to hurl fireballs. This is a flipbook flame effect that rises over time.

This emitter is typically tied to an entity. This allows the use of the entity_aabb shape, as we want the flames to appear all over the blaze. The effect is created/destroyed by the entity, thus the effect itself just needs to be always on.

For this effect, we use the texturewidth/height to make the texel "resolution" be one frame of animation, thus allowing advancement of the frames to be just one.

{
  "format_version": "1.8.0",
  "particles": {
    "minecraft:mobflame_emitter": {
      "basic_render_parameters": {
        "material": "particles_alpha",
        "texture": "textures/flame_atlas"
      },
      "components": {
        "minecraft:emitter_local_space": {
          "position": true,
          "rotation": true
        },
        "minecraft:emitter_rate_steady": {
          "spawn_rate": "Math.random(15, 25)",
          "max_particles": 50
        },
        "minecraft:emitter_lifetime_expression": {
          "activation_expression": 1,
          "expiration_expression": 0
        },
        "minecraft:emitter_shape_entity_aabb": {
          "direction": [ 0, 1, 0 ]
        },
        "minecraft:particle_initial_speed": "Math.random(0, 1)",
        "minecraft:particle_lifetime_expression": {
          "max_lifetime": 1.25
        },
        "minecraft:particle_motion_dynamic": {
          "linear_acceleration": [ 0, 1.0, 0 ],
          "linear_drag_coefficient": 0.0
        },
        "minecraft:particle_appearance_billboard": {
          "size": [ 0.5, 0.5 ],
          "facing_camera_mode": "lookat_xyz",
          "uv": {
            "texturewidth": 1,
            "textureheight": 32,
            "flipbook": {
              "base_UV": [ 0, 0 ],
              "size_UV": [ 1, 1 ],
              "step_UV": [ 0, 1 ],
              "frames_per_second": 32,
              "max_frame": 32,
              "stretch_to_lifetime": true,
              "loop": false
            }
          }
        }
      }
    }
  }
}


Bouncing Bubbles

This particle effect generates a bunch of bubbles that bounce around.

{
  "format_version": "1.8.0",
  "particles": {
    "minecraft:bounce": {
      "basic_render_parameters": {
        "material": "particles_alpha",
        "texture": "textures/particle/particles"
      },
      "components": {
        "minecraft:emitter_rate_instant": {
          "num_particles": 100
        },
        "minecraft:emitter_lifetime_once": {
          "active_time": 2
        },
        "minecraft:emitter_shape_sphere": {
          "offset": [ "Math.random(-0.5, 0.5)", "Math.random(-0.5, 0.5)", "Math.random(-0.5, 0.5)" ],
          "direction": "outwards",
          "radius": 1
        },
        "minecraft:particle_initial_speed": 5.0,
        "minecraft:particle_initial_spin": {
          "rotation": "Math.random(0, 360)",
          "rotation_rate": 0
        },
        "minecraft:particle_lifetime_expression": {
          "max_lifetime": "5"
        },
        "minecraft:particle_motion_dynamic": {
          "linear_acceleration": [ 0, -9.8, 0 ]
        },
        "minecraft:particle_motion_collision": {
          "coefficient_of_restitution": 0.5,
          "collision_drag": 4,
          "collision_radius": 0.1
        },
        "minecraft:particle_appearance_billboard": {
          "size": [ "0.1", "0.1" ],
          "facing_camera_mode": "rotate_xyz",
          "uv": {
            "texturewidth": 128,
            "textureheight": 128,
            "uv": [ 0, 16 ],
            "uv_size": [ 8, 8 ]
          }
        },
        "minecraft:particle_appearance_lighting": {}
      }
    }
  }
}
}




This website is not affiliated with Mojang Studios or Microsoft