Feature Release 2.8.0
Skript 2.8.0
Skript 2.8.0 is here for everyone to enjoy! This release contains many new features and bug fixes to improve the Skript experience.
Below, you can familiarize yourself with the changes. As always, report any issues to our issues page! Per our new release model, we plan to release 2.8.1 on February 1st to continue addressing bugs. In the event of any critical issues, an emergency patch release may come sooner.
Happy Skripting!
⚠ Breaking Changes
- Using players in variable names will soon change from defaulting to names to defaulting to UUIDs. Warnings have been added to help smooth out this transition. See #6270 for more information.
- Removed Projectile Bounce State condition and expression. These haven't done anything for years.
- The
target entity of player
expression has been improved and now uses raytracing to find the player's target. This should cut down on false positives significantly, but the change in behavior may cause issues for some users who relied on its quirks. - Parsing players from player names is now a bit more intuitive. Previously, parsing
"xyz"
as a player would return the first online player to contain"xyz"
somewhere in their name. Now, it only returns players that start with"xyz"
. See #5875 for more. - Major changes have been made to the
on grow
event. The grow event now has many more options to specify how you want it to listen. These changes mean that code that useson grow of x
may fire twice as often as expected.
# x -> something
on grow[th] from X
# something -> x
on grow[th] into X
# X -> Y
on grow[th] from X [in]to Y
# x is involved in some way
on grow[th] of X
- The expression
durability of %item%
now actually returns the durability (a pick with durability 103/160, for example, returns 103) instead of the prior behavior, where it would act likedamage of %item%
(returning 57 for 103/160). - When there are multiple valid event-values for a default expression, Skript will now error and ask you to state which one you want instead of silently picking one. See the following example:
on right click on entity:
send "test"
# This will now error, because Skript doesn't know whether to
# send it to the clicked entity or the player doing the clicking.
- Arithmetic evaluation will now return
<none>
for a whole chain if one of the operations is illegal. Previously, adding1 + "hello"
would treat"hello"
as0
and just return1
. This now returns<none>
. However, the behavior of adding things to unset values hasn't changed.1 + {_none}
still returns1
.
Changelog
Additions
- #4198 Added syntax for interacting with item cooldowns:
- a condition that checks whether a player has a cooldown for an item
- an expression to get and change the cooldown of an item for a player
- #4593 Added
raw index of slot
expression. - #4595 Added
loop-(counter|iteration)[-%number%]
for both normal and while loop and improved performance for loop-value. - #4614 Added the ability to only get certain item types when using the
items in inventory
expression. - #4617 Added anvil repair cost expression.
- #5098 Added an expression to repeat a given string multiple times.
- #5271 Added time states for the
tool change
event'sevent-slot
and for thehotbar slot
expression. Also allows the ommission of the player inhotbar slot
when using it in events that have an event-player. - #5356 Added an expression for getting and changing the portal cooldown of an entity.
- #5357 Added toggle pickup for items on living entities.
- #5359 Added
is jumping
for living entities condition. (Paper 1.15+) - #5365 Added syntax for interacting with an entity's active item:
- a condition that checks whether an entity's hand(s) is raised
- an expression to get an entity's active item (e.g. a bow)
- an expression to get the time they've spent using it or how long they need to keep using it to complete the action (e.g. eating)
- an expression to get the maximum time an item can be used for
- an expression to get the arrow selected in the
ready arrow
event - an effect to cancel the usage of an item
- events for when a player readies an arrow and when a player stops using an item.
- #5366 Added support for getting and modifying the inventories of items, like shulker boxes.
- #5367 Added syntax to check and set whether a sign has glowing text.
- #5456 Added the ability to get all armor pieces of an entity.
- #5460 Added an event for when a player selects a stonecutting recipe.
- #5462 Added InventoryMoveItemEvent.
- #5482 Added an expression to get the vector projection of two vectors.
- #5494 Added a condition to check if an entity is left or right handed, and adds an effect to change their handedness.
- #5502 Added syntax to create vectors from directions.
- #5562 Added a condition to check if an entity has unbstructed line of sight to another entity or location.
- #5571 Added a condition to check if an entity is shorn or not. Also expands the entities that can be shorn with the
shear
effect. - #5573 Added a function to clamp a value between two others.
- #5588 Added player arrow pickup event.
- #5589 Added hit block of projectile.
- #5618 Added
is climbing
for living entities condition. - #5636 Added
Free/Max/Total Server Memory
expression. - #5662 Added expression to return the loaded chunks of worlds.
- #5678 Added item damage to the
damage
expression. - #5680 Added inventory close reason in inventory close event.
- #5683 Added
event-item
andevent-slot
to the resurrect event. If no totem is present, these values arenone
. - #5763 Added Paper 1.16.5+ quit reason for finding out why a player disconnected.
- #5800 Added an event for when an entity transforms into another entity, like a zombie villager being cured or a slime splitting into smaller slimes.
- #5811 Added the ability to execute a command as a bungeecord command like /alert.
- #5814 Added
returns
aliases forfunction
definition. - #5845 Added
player
andofflineplayer
functions. - #5867 Added expressions to get all characters between two characters, or an amount of random characters within a range.
- #5894 Added support for keybind components in formatted messages (
<keybind:value>
). - #5898 Added
apply bone meal
effect. - #5948 Added an event for when players are sent the server's list of commands, as well as an expression to modify them.
- #5949 Added an expression to get a percentage of one or more numbers.
- #5961 Added the ability to listen for entities rotating, or rotating and moving, in the
on move
event. - #6101 Adds an effect to copy the contents and indices of one variable into others.
- #6146 Multiple # signs at the beginning of a line now start a comment.
- #6162 Added a function
isNaN(number)
to check if a number is NaN. - #6180 The syntax to get a location from a vector and a world has been re-added.
- #6198 Added Turkish translation.
Bug Fixes
- #5308 Fixed
cursor slot
not always returning the correct item ininventory click
events. - #5406 Fixed some order of operation issues with the
difference
expression. - #5744 Fixed an issue where the error for missing enum lang entries would be printed much more often than they should be.
- #5815 Improvements to comparators and converters.
- #5878 Fixed some issues with the
parsed as
expression returning arrays or throwing exceptions. - #6224 Fixed the examples for applying potion effects.
- #6229 Fixed an exception when trying to get the text input of an anvil.
- #6231 Fixed an exception when trying to print a block state.
- #6239 Fixed an exception when removing items from
drops
in 1.20.2+. - #6266 Fixed a bug that caused incorrect errors to be printed when comparing things.
Removals
- #5958 Removed the projectile bounce state condition and expression. These had no function.
Changes
- #4281 Rewrote the
furnace slot
expressions and fixes numerous issues with them. - #5114 Added the ability to save, load, and unload specific worlds, or listen for those event for specific worlds.
- #5279 Changed how Skript does arithmetic to support many more combinations, like multiplying vectors by scalars, adding timespans, and more.
- #5478 Improved the
element
expression and adds the ability to A, get the first or last x elements of a list, and B, get the elements in a range from x to y in the list. - #5639 Major changes to the
on grow
event. Fixes an issue where listening toon grow of sugarcane
or any other full-block plant, like cacti or pumpkins, would never fire. Adds more functionality to specify what exactly to listen for.
# x -> something
on grow[th] from X
# something -> x
on grow[th] into X
# X -> Y
on grow[th] from X [in]to Y
# x is involved in some way
on grow[th] of X
- #5674 Made the
case-insensitive variables
config option visible by default in the config file. - #5769 Skript now errors when an ambiguous event value is found for a default expression:
# This will now error, as it's unclear who to send "test" to!
on right click on entity:
send "test"
- #5796 Expanded the
block change
event and adds block and blockdata event values. - #5841 Inventory titles now support hex colours and more.
- #5875 Changed the parsing of players to only match players that start with that name, rather than simply containing the name.
- #5889 Allows the omission of the command name when using the command info expressions within a command's trigger section or command event.
- #5900 Improved how event parsing is handled internally.
- #5976 Added
decrease
as an alias forreduce
, e.g.decrease {_var} by 2
. - #6010 Allows the use of
and with
beforefade out
in thetitle
effect. - #6024 Allows
continue
to continue outer loops. - #6139 Allows setting the current hotbar slot of a player to a number as well as a slot.
- #6157 Changes the
target entity
expression to use raytracing for a player's target. This should make it much more accurate, but may change behavior slightly. Also adds an option to change the ray size and to ignore blocks. - #6172 Allows the plural "commands" in the execute command effect.
- #6271 Added warnings for using players in variable names, without the
use player uuids in variable names
config option enabled. - #6298 Fixed the outdated website link in Skript's plugin description.
API Changes
- #5307 Switched
Timespan#getTicks
andTimespan#fromTicks
from returning ints to returning longs. DeprecatedTimespan#getTicks_i
andTimespan#fromTicks_i
due to API name change. - #5408 Cleaned up the Yggsdrasil serialization code.
- #5440 Added a "parse section", which can be used to test if code properly parses or not. This is for the testing suite.
- #5502 Added method
Direction#getDirection
which returns a vector. - #5550 The Skript profiler can now run for as long as the user wants.
- #5874 SimplePropertyExpression now automatically defends
%objects%
to avoid UnparsedLiterals. - #5941
ExpressionType#NORMAL
was removed.ExpressionType#EVENT
was added for EventValueExpressions. A new default register method was added to EventValueExpression. - #5955 Added
WILL
to PropertyCondition to allow for easy registration for conditions likeplayer will consume the firework charge
. - #6000 Renames the field
SyntaxElementInfo#c
toSyntaxElementInfo#elementClass
. This field will be made private in 2.9. Please use theSyntaxElementInfo#getElementClass()
getter instead. - #6001 Renamed the Slot classinfo from
Inventory Slot
toSlot
. - #6054 Replaced
MarkedForRemoval
annotations withApiStatus.ScheduledForRemoval
. - #6261 Allows overrides of the
cleanup()
method in JUnit tests.
Click here to view the full list of commits made since 2.7.3
Notices
Help Us Test
We have an official Discord community for beta testing Skript's new features and releases. We're currently testing a new version of skript-reflect and we would love some more testers!
Thank You
Special thanks to the contributors whose work was included in this version:
- @3meraldK
- @APickledWalrus
- @AyhamAl-Ali
- @DelayedGaming
- @erenkarakal
- @EquipableMC
- @Fusezion
- @kiip1
- @MihirKohli
- @Moderocky
- @Noteult
- @nylhus
- @Pikachu920
- @sovdeeth
- @TheLimeGlass
- @UnderscoreTud
As always, if you encounter any issues or have some minor suggestions, please report them at https://github.com/SkriptLang/Skript/issues.
If you have any bigger ideas or input for the future of Skript, you can share those too at https://github.com/SkriptLang/Skript/discussions.