skript-particle
Skript addon for creating complex particle effects with minimal hassle.
Requires Skript 2.7+, Java 17+, Paper 1.18 - 1.20.4
Download at the releases page.
You can find help, give suggestions, or voice complaints in the Issues tab here, or on the skript-chat discord here.
Skript-Particle is intended to provide syntax for creating complex shapes with particles. Competent and powerful particle syntaxes exist in addons like SkBee, but creating shapes requires a lot more effort and know-how. They're also inherently slower and less performant than Java, even without considering the usual need to re-calculate the shape each time it's drawn.
The goal for Skript-Particle is to provide easy-to-use, flexible, and powerful syntax to create particle shapes. The basic structure is a set of various shapes, like circles, lines, polygons, and more. These shapes are relative to a center point and aren't positioned anywhere specific. The drawing syntax takes a set of shapes and a location and draws all the shapes relative to that location. This allows the definition of a bunch of shapes that only need to be defined once and can then be drawn in many places and in many rotations. Since shapes can be rotated as a group, it's also very simple to change the rotation and orientation of your shapes with a single line.
Syntax available on skUnity and SkriptHub
Here's some example code:
command /magic:
trigger:
set {_shapes::outer-circle} to a circle of radius 2.225
set {_shapes::inner-circle} to a circle of radius 2
set {_shapes::tiny-circle} to a circle of radius 0.875
set {_shapes::triangle-1} to a triangle with radius 2
set {_shapes::triangle-2} to a triangle with radius 2
rotate shapes {_shapes::triangle-2} around y axis by 60 degrees
set particle of {_shapes::*} to electric spark
loop 200 times:
set {_view} to vector from yaw player's yaw and pitch player's pitch
set {_yaw} to yaw of {_view}
# figure out the rotation needed to rotate the shape
set {_rotation} to rotation from vector(0, 1, 0) to {_view}
draw the shape {_shapes::*} at player's eye location ~ {_view}:
# only happens for this draw call, the original shape is not modified
# note that this is called once for each shape, hence `drawn shape` and not `drawn shapes`
rotate drawn shape by {_rotation}
# the shape takes the shortest path to rotate to the desired rotation, but that causes it to appear to rotate as we turn.
# so we'll correct for it by rotating the shape around the y axis by the yaw of the player
rotate drawn shape around relative y axis by -1 * {_yaw}
wait 1 tick
Current Features:
- Shapes:
- Bezier Curves
- Circles, Ellipses, Spheres, and Ellipsoids
- Cylinders and Elliptical Cylinders
- Arcs and Spherical Caps
- Helices
- Lines
- 2D Regular and Irregular Polygons and Prisms
- Regular polyhedra
- Rectangles and cuboids
- Drawing:
- Three styles: outline, surface, and filled. Some shapes only support one or two of these styles.
- Rotation to any orientation.
- Scaling and offsetting.
- Drawing multiple shapes at once.
- Options for who sees the particles (player specific)
- Custom particle data and density per shape
- Full support for SkBee's particle data syntaxes
- Debug axes for clear visualization of the orientation of your shape.
- Shapes are only calculated when they actually change, so you can draw the same shape many times without any performance hit.
- Option to make all calculation and drawing synchronous (async by default)
- Ability to continuously draw a shape for a timespan (async only)
- Dynamic locations, so particles can follow an entity with no additional user effort
- Particles:
- Expression for custom particles
- Section for custom particles
- Animation:
- Ability to stretch out drawing a shape over a timespan
Planned Features:
- Shapes:
- Custom shapes defined by a function
- "Common but difficult to code" shapes like hearts, stars, and more
- Drawing:
- Combining shapes into a custom shape to be drawn as a single shape.
- Gradient colour fields, with custom colour nodes.
- Animation:
- Set up a pre-made animation in a custom structure, play back with one draw call

All Versions
+ Add VersionLikely the last 1.X version of skript particle, so this is built off the legacy-ev-fix branch rather than main.
### Changelog
- Fixed compatibility with Skript 2.15 (small issue with event-value registration on my part)
### Syntax
Syntax is available on [SkUnity](https://docs.skunity.com/syntax/search/addon:skript-particle) and [SkriptHub](http://skripthub.net/docs/?addon=Skript-Particle)!
### PLEASE REPORT ALL BUGS, SUGGESTIONS, AND OTHER FEEDBACK IN [THE ISSUES TAB](https://github.com/sovdeeth/skript-particle/issues/new/choose)!!
- If you have questions, small suggestions, or just need help, check out the skript-particle channel in [the skript-chat discord.](https://discord.gg/V4qFVnh)**
### Changelog
- Fixed compatibility with Skript 2.14
- Some major breaking syntax changes were made, as Skript now has competent particles support.
- the
custom particleexpression has been removed in favor of Skript's own particle system. - the
draw particleeffect has likewise been removed. - the
custom particlesection has had itsdataentry removed, as that should be taken care of via Skript's particle system:
a custom dust particle with:
data: dustOptions(red, 1)
velocity: inwards
vs
a custom red dust particle with:
velocity: inwards
`
- skript-particle's
custom particles should behave exactly like Skript's particle effects` in Skript's syntaxes. (e.g. you can set scale/velocity/distribution like normal)### Syntax
Syntax is available on [SkUnity](https://docs.skunity.com/syntax/search/addon:skript-particle) and [SkriptHub](http://skripthub.net/docs/?addon=Skript-Particle)!
### PLEASE REPORT ALL BUGS, SUGGESTIONS, AND OTHER FEEDBACK IN [THE ISSUES TAB](https://github.com/sovdeeth/skript-particle/issues/new/choose)!!
- If you have questions, small suggestions, or just need help, check out the skript-particle channel in [the skript-chat discord.](https://discord.gg/V4qFVnh)**
### Changelog
- Fixed compatibility with Skript 2.12.2
- Some breaking syntax changes were required to avoid conflicts:
(length|width|height) of %shape%->shape (length|width|height) of %shape%scale of->shape scale oflocations of->(particle|point) locations of- Added docs to ExprBezierCurve
### Syntax
Syntax is available on [SkUnity](https://docs.skunity.com/syntax/search/addon:skript-particle) and [SkriptHub](http://skripthub.net/docs/?addon=Skript-Particle)!
### PLEASE REPORT ALL BUGS, SUGGESTIONS, AND OTHER FEEDBACK IN [THE ISSUES TAB](https://github.com/sovdeeth/skript-particle/issues/new/choose)!!
- If you have questions, small suggestions, or just need help, check out the skript-particle channel in [the skript-chat discord.](https://discord.gg/V4qFVnh)**
### Changelog
- Fixed compatibility with Skript 2.10
- Fixed a bug with
points of %shape%returning true for isSingle() - Fixed a bug where some line constructing patterns returned false for isSingle()
### Syntax
Syntax is available on [SkUnity](https://docs.skunity.com/syntax/search/addon:skript-particle) and [SkriptHub](http://skripthub.net/docs/?addon=Skript-Particle)!
### PLEASE REPORT ALL BUGS, SUGGESTIONS, AND OTHER FEEDBACK IN [THE ISSUES TAB](https://github.com/sovdeeth/skript-particle/issues/new/choose)!!
- If you have questions, small suggestions, or just need help, check out the skript-particle channel in [the skript-chat discord.](https://discord.gg/V4qFVnh)**
### Changelog
- Added Bezier curves.
[a] [bezier] curve from [start] %vector/entity/location% to [end] %vector/entity/location% (with|using) control point[s] %vectors/entities/locations%
`
- Added basic ordering for animations. More orderings coming later.
`
set the animation order of %shapes% to (default|lowest-to-highest|highest-to-lowest)
``- Some updates to error handling to avoid console spam if you mess up.
- Fixed a few little bugs with nullability.
### Syntax
Syntax is available on [SkUnity](https://docs.skunity.com/syntax/search/addon:skript-particle) and [SkriptHub](http://skripthub.net/docs/?addon=Skript-Particle)!
### PLEASE REPORT ALL BUGS, SUGGESTIONS, AND OTHER FEEDBACK IN [THE ISSUES TAB](https://github.com/sovdeeth/skript-particle/issues/new/choose)!!
- If you have questions, small suggestions, or just need help, check out the skript-particle channel in [the skript-chat discord.](https://discord.gg/V4qFVnh)**
### Changelog
- Fixed NPEs when using debug verbosity
- Added lang entries for various types
- Fixed a conflict between SkBee's
draweffect anddraw shapes - Made SecParticle much safer and better at erroring (thanks @ShaneBeee)
### :warning: **Breaking Changes:** :warning:
My apologies for this change, but it was the only way to resolve a collision issue between the draw particle and draw shape effects when using variables.
The draw shape effect section now requires the use of the keyword
shape to avoid conflicts:``
[sync[hronously]] draw [the] shape[s] [of] %shapes% [%-directions% %-locations/entities%] [to %-players%]",
draw [the] shape[s] [of] %shapes% [%-directions% %-locations/entities%] [to %-players%] for [duration] %timespan% [with (delay|refresh [rate]) [of] %-timespan%]"
`` ### Syntax
Syntax is available on [SkUnity](https://docs.skunity.com/syntax/search/addon:skript-particle) and [SkriptHub](http://skripthub.net/docs/?addon=Skript-Particle)!
### PLEASE REPORT ALL BUGS, SUGGESTIONS, AND OTHER FEEDBACK IN [THE ISSUES TAB](https://github.com/sovdeeth/skript-particle/issues/new/choose)!!
- If you have questions, small suggestions, or just need help, check out the skript-particle channel in [the skript-chat discord.](https://discord.gg/V4qFVnh)**