skript-particle
Skript addon for creating complex particle effects with minimal hassle.
Requires Skript 2.9+, Java 17, Paper 1.17.1+
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 is available on
skUnity and
SkriptHub.
Here's some example code:
Code (AppleScript):
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 shapes
{_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 shape 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 shape drawn shape around relative y axis
by
-
1
*
{_yaw
}
wait
1 tick
Current Features:
- Shapes:
- 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
- Custom motion for particles (vector, inwards/outwards, [anti]clockwise)
Planned Features:
- Shapes:
- Bezier Curves
- Custom shapes defined by a function or structure
- "Common but difficult to code" shapes
- Drawing:
- Combining shapes into a custom shape to be drawn as a single shape.
- Gradient colour fields, with custom colour nodes.
- Animation:
- Ability to stretch out drawing a shape over a timespan
- Set up a pre-made animation in a custom structure, play back with one draw call