Skript is a Bukkit plugin which allows server admins to customize their server easily, but without the hassle of programming a plugin or asking/paying someone to program a plugin for them.
Our last stable release was 2.6.4 nearly a year ago, and a lot has happened since then. In this release, we have implemented over 80 new features along with nearly 70 bug fixes. Beyond that, a significant portion of this time has been spent on overhauling Skript's codebase. This update includes some of the biggest internal enhancements in years. Almost every part of Skript should run faster, and as we continue to build upon these improvements, the benefits will only grow.
We realize that this update has taken much longer than expected. Our development cycle has been rather flawed, and we are committed to making changes that will result in a clearer release schedule. We will have more to share about that soon when we finalize a new process.
🎉 We are also very excited to welcome a new member, @sovdeeth to our team.
Thank you all again for your continued support. Happy Skripting! ⚡
As mentioned in the previous releases, we have decided to drop support for 1.12 and lower (legacy versions). This means that this version will only work on versions 1.13 and higher. Only critical fixes will be backported to 2.6.X.
Due to the major internal changes within this update, some addons may no longer work properly. Please be patient as addon developers work to update their addons. We have published a new release of our AddonPatcher, but be aware that it cannot fix all issues.
# Here is an example list declaration
set {_l::*} to "abc", length of "def", "ghi"
# Previous Behavior
Interpretation: "abc", length of ("def", "ghi")
Result: "abc", 3, 3
# New Behavior
Interpretation: "abc", length of ("def"), "ghi"
Result: "abc", 3, "ghi"
set {_item} to <some item with 1000 durability>
add 5 to the damage of {_item} # durability is now 995/1000
add 5 to the durability of {_item} # durability is now 1000/1000 again
Click below to view the entire changelog for this release (all changes since 2.6.4).
📃 All new syntax can be viewed on docs.skriptlang.org.
Language support for French, Polish, Simplified Chinese, and Japanese has been added.
We have significantly overhauled the default examples. The goal of these new examples is to display most of Skript's feature set with a better range of difficulties.
Multiline conditionals has been added. These work on an if-then based structure.
# all conditions must pass
if:
condition 1
condition 2
then:
do stuff
# at least one condition must pass
if any:
condition 1
condition 2
then:
do stuff
# it can also be used in else-if statements
if 1 + 1 = 3:
do stuff that will never actually be done
else if:
condition 1
condition 2
then:
do stuff
else:
do stuff
# in script1.sk
local function welcome():
broadcast "Welcome!"
# in script2.sk
on script load:
welcome() # this will error as `welcome()` is only available in script1.sk
options:
price:
apple: 1000
orange: 100
# {@price.apple} and {@price.orange} are now valid options
the last struck lightning
(this only applies to lighting strikes created by Skript) (closes #3872)Look for
long parse time warning threshold
in yourconfig.sk
!
Note that these expressions will now take into account the case sensitivity config option (closes #4886)
Note that when a change is detected, existing lang files will be moved into a backups folder
the last launched firework
(this only applies to fireworks launched by Skript) (closes #4942)type of
expressiona
/an
in inventory typesThat is, you can now write
set {_var} to a shulker box inventory
.
The command prefix is used when there may be command name conflicts with another plugin (this is the
skript:
part ofskript:mycustomcommand
).
name of
syntax (thanks @DelayedGaming)An entity will be considered invalid if it has died or despawned.
Note that this is only available on Minecraft 1.19.3 and newer.
Example: `send "<copy:text to copy>text to display"
Examples include
all colors
,all potion effect types
, etc.
value within
syntax for modifying the values of a variable rather than the variable itselfExample:
delete the entity within {_entity}
# deletes the entity rather than the variable
Example:
send "<translate:block.minecraft.diamond_block>"
printsBlock of Diamond
/skript
command (specifically for enabling/reloading/disabling scripts) (closes #4666)subtext
expression to substring
(thanks @Kanvi1) (closes #5196)on skript start
(closes #5882)Please understand that for the moment, parallel loading is not performed for most script loading, and therefore will have little effect. Significant improvements are expected for the future.
on stop
) (closes #4916)target falling block
did not work (closes #5223)Note that a SkriptAPIException will now occur instead as this in incorrect API usage.
all blocks
syntax (closes #5565)target of
expression throwing an exception in some cases when deleting an entity (closes #5761)all blocks
expression throwing an exception when used with directions only (closes #5787)stop all sounds
effect (closes #5756):[abc|def]
is now equivalent to [:abc|:def]
(this was already the case for :(abc|def)
and (:abc|:def)
)final
modifier on PropertyExpression has been removed, allowing them to return multiple items per element if overriden (see #5455) (closes #5521)Credit to the team on this release: @APickledWalrus @TheLimeGlass @TPGamesNL @AyhamAl-Ali @sovdeeth @Pikachu920 @UnderscoreTud @Moderocky
We have an official Discord community for beta testing Skript's new features and releases.
We saw a large increase in new contributors recently, and we just wanted to thank all who have contributed to this version of Skript. Lots of issues and suggestions arise and we could not have made it here without the help of the community.
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.
This is a BETA release, which means it is not yet meant for production servers. It may contain bugs or unexpected behaviors in its current state. We recommend you extensively test this release on a local server before taking the risk of using it on a production server (if you truly wish to). We do have many tests in place to ensure the integrity of Skript remains stable to some degree.
Due to the major API changes within the 2.7.X updates, some addons may no longer work properly. Please be patient as addon developers work to update their addons. We expect to publish a new release of our AddonPatcher in the near future, but be aware that it cannot fix all issues.
Yet again we mention that we have dropped support for 1.12 and lower (legacy versions) since Skript 2.7. This means that this (and any 2.7.X) version will only work on Minecraft versions 1.13 and higher. Only critical fixes will be backported to 2.6.X -- Report any if found.
Click below to view the entire changelog for this release.
on falling block land:
event being called whenever a block turns into a falling block, when it shouldn't. Only when it lands.
On top of this; on falling block falling
has been added, so you can now properly get both falling block state events. (Thanks @DelayedGaming)type of <itemtype>
(Closes https://github.com/SkriptLang/Skript/issues/5693)fire
as a visual effect and due to this, it would not be allowed to be used as an entity or a block. (Closes https://github.com/SkriptLang/Skript/issues/2711, https://github.com/SkriptLang/Skript/issues/4773, https://github.com/SkriptLang/Skript/issues/5497, https://github.com/SkriptLang/Skript/issues/5557 and https://github.com/SkriptLang/Skript/issues/5675)id of %itemtypes%
Skript has since supported 1.13+ and we don't use ID values anymore.(damage[s] [value[s]]|durabilit(y|ies)) of %itemtypes/slots%
would treat damage and durability the same. Now durability is how much durability is left on the tool, and damage is how damaged the tool is, so you can get both sides of the slider now rather than them being the same. (Closes https://github.com/SkriptLang/Skript/issues/4692).AliasesProvider.materials
set implementation from Java SE HashSet to FastUtil ObjectOpenHashSet, which improved Aliases loading time by ~40%. (Thanks @bluelhf)Credit to the team on this release: @AyhamAl-Ali @UnderscoreTud @TheLimeGlass @APickledWalrus
We have an official Discord community for beta testing Skript's new features and releases.
Second beta for Skript 2.7 addressing a handful of bugs.
This is a BETA release, which means it is not yet meant for production servers. It may contain bugs or unexpected behaviors in its current state. We recommend you extensively test this release on a local server before taking the risk of using it on a production server (if you truly wish to). We do have many tests in place to ensure the integrity of Skript remains stable to some degree.
Due to the major API changes within the 2.7.X updates, some addons may no longer work properly. Please be patient as addon developers work to update their addons. We expect to publish a new release of our AddonPatcher in the near future, but be aware that it cannot fix all issues.
Yet again we mention that we have dropped support for 1.12 and lower (legacy versions) since Skript 2.7. This means that this (and any 2.7.X) version will only work on Minecraft versions 1.13 and higher. Only critical fixes will be backported to 2.6.X -- Report any if found.
Click below to view the entire changelog for this release.
gradlew clean build
when building for the first time. This is due to Paper 1.17+ requiring Java 17. Skript still targets Java 8 (MC versions under 1.17 can still run Java 8), so your contributions should build target Java 8.gradlew build
We have an official Discord community for beta testing Skript's new features and releases.
After many delays, we are excited to finally publish the first beta for Skript 2.7. With numerous new features, countless bug fixes, and amazing API overhauls, 2.7 has shaped up to be one of our biggest releases ever. We are seeing incredible growth in new contributors, and we want to thank all of you for your continued support. The future of the project has never looked brighter. So, without further ado, we present our first beta for 2.7! - SkriptLang Team
This is a BETA release, which means it is not yet meant for production servers. It may contain bugs or unexpected behaviors in its current state. We recommend you extensively test this release on a local server before taking the risk of using it on a production server (if you truly wish to). We do have many tests in place to ensure the integrity of Skript remains stable to some degree.
Due to the major API changes within this update, some addons may no longer work properly. Please be patient as addon developers work to update their addons. We expect to publish a new release of our AddonPatcher in the near future, but be aware that it cannot fix all issues.
As mentioned in the previous releases, we have decided to drop support for 1.12 and lower (legacy versions). This means that this version will only work on versions 1.13 and higher. Only critical fixes will be backported to 2.6.X.
Documentation website has been reworked and redesigned with countless additions and fixes (#4319). In addition to that, Skript documentation files has been moved to a new repository skript-docs where it will be maintained there separately. Make sure to check the docs site out and report issues on the new issue tracker.
There are so many contributions in this release, the changelog needs its own link! Click here to view the entire changelog for this release.
Thanks @Romitou, @3meraldK, @Nicofisi, @Zabujca997, @CJYKK, @faketuna, @rilyhugu, @kiip1, @sovdeeth, @Ankoki, @UnderscoreTud, @AbeTGT, @D4isDAVID, @hotpocket184, @DelayedGaming, @GodModed, @colton-boi, @cooffeeRequired, @ShaneBeee and @Fusezion for contributing!
normal shulker box = that purple undyed box
down facing shulker box = same as above just in a direction
any shulker box = any coloured shulker box including the uncoloured one
all shulker boxes = all shulker boxes and the uncoloured one, no duplicates
s
= lapiss to not.+ PropertyExpression#registerDefault(Class<? extends Expression<T>>, Class<T>, String, String);
property [of %types%]
and
%types%'[s] property
We have an official Discord community for beta testing Skript's new features and releases.
We saw a large increase in new contributors recently, and we just wanted to thank all who have contributed to this version of Skript. Lots of issues and suggestions arise and we could not have made it here without the help of the community.
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.
@ShaneBeee has decided to leave the SkriptLang team. We are sad to see him go, but we also want to appreciate all of his contributions over the years. This project would not be where it is today without his dedication, and we are forever thankful.
Please welcome @UnderscoreTud to the SkriptLang team! Their recent contributions have helped us deliver this massive update and we look forward to working with them at a closer level.
Today we're releasing version 2.6.4 which brings out a couple fixes towards Minecraft versions below 1.14
As mentioned in the previous releases, we have decided to drop support for 1.12 and lower (legacy versions) in Skript 2.7. This means that Skript 2.6.X is the last version that will work with the legacy versions. Only critical fixes will be backported to 2.6.X.
Click below to view the entire changelog for this release.
potioneffects
and potioneffecttypes
(#5117) (thanks @Fusezion)[on] silverfish enter
and [on] silverfish exit
events not actually working.of %itemtype%
syntax in preparing craft event (https://github.com/SkriptLang/Skript/issues/4959)Click here to view the full list of commits made since 2.6.3
We have an official Discord community for beta testing Skript's new features and releases.
We saw a large increase in new contributors recently, and we just wanted to thank all those who have contributed to this version of Skript, lots of issues and suggestions arise and we couldn't have done it all without the help of the community.
As always, if you encounter any issues or suggestions please report them at https://github.com/SkriptLang/Skript/issues If you have any ideas or input for the future development of Skript, you can share those too at https://github.com/SkriptLang/Skript/discussions
Today we're releasing version 2.6.3 which brings out Minecraft 1.19 Support and some critical fixes towards UnparsedLiterals aka your itemtype being parsed as something totally different!
As mentioned in the previous releases, we have decided to drop support for 1.12 and lower (legacy versions) in Skript 2.7. This means that Skript 2.6.X is the last version that will work with the legacy versions. Only critical fixes will be backported to 2.6.X.
Click below to view the entire changelog for this release.
event-inventory
& event-itemtype
(#4409)/sk info
(they are soon to come) (#4838)on preparing craft:
event not firing at the right time (#4409)/sk info
(#4838)hanging entity
expression in non-hanging-events (e.g. breaking a stone) (#4874)Click here to view the full list of commits made since 2.6.2
We saw a large increase in new contributors recently, and we just wanted to thank all those who have contributed to this version of Skript, lots of issues and suggestions arise and we couldn't have done it all without the help of the community.
As always, if you encounter any issues or suggestions please report them at https://github.com/SkriptLang/Skript/issues If you have any ideas or input for the future development of Skript, you can share those too at https://github.com/SkriptLang/Skript/discussions
It's been some time since our last release, but we're finally ready and able to release Skript 2.6.2 today. This version mainly contains bug fixes and improvements, but there are also a few minor additions. For full details, you can check out the update's full changelog below.
I'd also like to welcome our newest team member, @AyhamAl-Ali! They have become a crucial part of this project with their awesome feature and bug patches, but more importantly, their terrific web experience and contributions. The docs have never looked better! I'm truly looking forward to everything they'll continue to offer this project. Thank you again for your contributions!
As mentioned in the previous releases, we have decided to drop support for 1.12 and lower (legacy versions). This is likely to be the last 2.6.x release, making this the last version to support 1.12 and lower. If necessary, we will backport critical fixes.
or
in lists (https://github.com/SkriptLang/Skript/pull/4545, closes https://github.com/SkriptLang/Skript/issues/4543)Please note that with this change,
or
lists will no longer always pick a set value, meaning in something like:set {_x} to 10 set {_y} to {_x} or {_not-set-variable}
{_y} will be set to
10
or set to nothing (whereas it would always be set to10
before)
Please note that this change removes the ability to use
saturation
as a default expression. This breaks scripts that do something like:on hunger bar change: broadcast "%saturation%"
clicked enchantment button
expression and improved its documentation (https://github.com/SkriptLang/Skript/pull/4688, closes https://github.com/SkriptLang/Skript/issues/4686)This is useful for plugins like Geyser where some usernames are prefixed by a specific character.
This change forces users to use
attacker/victim
to avoid confusion as to why they're not getting a message or why their code isn't erroring.
all
to the indices expression (https://github.com/SkriptLang/Skript/pull/4551, closes https://github.com/SkriptLang/Skript/issues/4547)[the]
prefixes (https://github.com/SkriptLang/Skript/pull/4604)otherside
music disc introduced in 1.18 (https://github.com/SkriptLang/Skript/pull/4742) (click here to see the full changes)As always, if you encounter any issues please report them at https://github.com/SkriptLang/Skript/issues. If you have any ideas or input for the future development of Skript, you can share those too at https://github.com/SkriptLang/Skript/discussions.
As with the previous release, the full changelog can be found below this summary.
Skript now officially supports Minecraft 1.18. There was a temporary unofficial release from @ShaneBeee on the skUnity Discord, but we recommend switching to this official release now.
Skript's parsing output (the errors and warnings) are now easier to read and more stylish, thanks to a PR from @AyhamAl-Ali.
For addon developers: This change could cause your addon to not compile anymore due to your code overriding the method
Parser#getVariableNamePattern
, that has now been removed. To fix this, remove the@Override
annotation if you want to preserve backwards compatibility with older Skript versions, otherwise remove the method entirely.
/skript info
command (thanks @AyhamAl-Ali)ParserInstance#getCurrentSection
(closes #4446, thanks @Olyno)The docs will be updated with the new changes soon.
After a lot of discussion, we have decided to drop support for 1.12 and lower, as it stops us from adding a lot of features and focusing on other parts of Skript. 2.6.x
will be the last version working with 1.12 and lower. Security patches and other kind of fixes might be ported to this version, but keep in mind that features won't be added.
https://repo.skriptlang.org/releases
! Read more about it in #4506.Parser#getVariableNamePattern
, see the full changelog above for more info.SkriptEvent#getEventClasses
so a SkriptEvent has control over which event class the code is parsed with, see #4195).Another thing to note for addon developers and people who wish to contribute to the project, we have moved the main discussion area to the skUnity discord. While Skript-chat was good enough we need to reflect our rapidly growing community's needs and we will achieve this by taking it to the largest Skript community in place.
This doesn't mean skUnity documentation/forums are handled by the SkriptLang organization as they take part of their own service. We'll still maintain our own documentation at https://skriptlang.github.io/Skript and support any other services such as SkriptHub/Skript-MC to continue taking part of this community!
As always, if you encounter any issues please report them at https://github.com/SkriptLang/Skript/issues. If you have any ideas or input for the future development of Skript, you can share those too at https://github.com/SkriptLang/Skript/discussions.
Because the full changelog is quite long, we've put it at the bottom of this release. Here are the most important changes of this release:
Skript now supports 1.17, including item and block aliases, entities, most particles and biomes.
This will improve the compatibility with platforms such as Magma or Mohist, although they remain unsupported.
This API allows addon developers to create their own sections, like the loop or conditional sections in Skript.
This includes Skript's math order, issues with string expressions, issues using variables within variables and issues with quotes within expressions in strings or variables.
lower than
as an option for smaller than
in the comparison conditionon leave
as an option for the quit eventThis makes platforms such as Magma or Mohist more compatible but they're not yet supported by our project.
The RGB literal has been changed from
RED: %integer%, GREEN: %integer%, BLUE: %integer%
to(rgb|RGB) %integer%, %integer%, %integer%
Color support has been added to the note particle effectnote [(of|with) [colo[u]r] %number%]
font, f
, example: <font:uniform>uniform text
)Event priorities can be read about here: EventPriority For most users, you will not need to worry about this. However, it is useful in cases where you want to be sure that Skript is determining the outcome of the event. Keep in mind that LOWEST priority events are called first and MONITOR priority events called last. To change the event priority of a listener, add
with priority <event priority>
to the end of the event, before:
.
log player commands
value in the config is now marked as false
by default, as servers already default to logging command usageIf you were missing an alias for
minecraft:basalt
, the aliasbasalt
(plural form just hass
on the end) would be created.
Please note that the
dust_color_transition
andvibration
particles are currently missing and will be added in a future update.
parse if conditional
This condition is just like the
if statement
, but it is prefixed with the wordparse
. If the condition does not pass in aparse if statement
, the code in its section will not be loaded. Example:on load: parse if plugin "SkBee" is enabled: # SkBee addon stuff here
do while loop
This is just like the while loop, but it will always run at least one time. Example:
on load: set {_x} to 0 while {_x} > 5: add 1 to {_x} # {_x} = 0 set {_x} to 0 do while {_x} > 5: add 1 to {_x} # {_x} = 1
applied enchantments
effect documentation<none>
was not functionalThis fix also adds a new expression, ExprPlain. A plain item is an item with no modifications. It can be used to convert items to their default state or to match with other default items. This is to provide a replacement for using
if player's tool is a diamond named ""
(you would instead useif the player's tool is a plain diamond
)
myFunction() + otherFunction()
)NOTICE: This rework removes the following syntaxes:
[the] list [of] %objects% (doesn't|does not|do not|don't) contain %objects%
[the] list [of] %objects% contain[s] %objects%
(all|any|none) of %strings% contain[s] %strings%
This change removes the vector yaw/pitch expression, it is now replaced by the normal yaw/pitch expression. This does mean that the word 'vector' was removed from the syntax, so if you use this syntax, you may have to change your scripts to adjust for this.
This also [re]adds the ability to teleport synchronously by prefacing the effect with
force
(e.g.force teleport the attacker to the victim
) Please note that the keyword 'force' indicates that the effect will not be delayed. This may cause lag spikes or server crashes when teleporting entities to unloaded chunks.
Please note that this fix removes the ability to damage an entity with a custom damage cause. This only worked because of a bug that has been fixed for a long time. If you still wish to use a custom damage cause (retain this functionality) you can use the last damage cause expression.
Addons may also choose to disable hooks in
JavaPlugin#onLoad
by callingSkript#disableHookRegistration
. They may also check whether a hook is enabled throughSkript#isHookEnabled
.
null
in string formWith this change, the
me
expression will no longer work in console. To refer to the console using effect commands, simply useconsole
.
After a lot of discussion, we have decided to drop support for 1.12 and lower, as it stops us from adding a lot of features and focusing on other parts of Skript. 2.6.x
will be the last version working with 1.12 and lower. Security patches and other kind of fixes might be ported to this version, but keep in mind that features won't be added.
Due to the merge of #3924, many addons might be broken by this release. If you want to make them compatible, you may use SkriptAddonPatcher or its plugin version.
I am glad to announce two new team members to the organization, @TPGamesNL who has been greatly contributing to the project with amazing patches and @TheLimeGlass who has always been a mindful part of the overall community and has also made great contributions in the past.
Another thing to note for addon developers and people who wish to contribute to the project, we have moved the main discussion area to the skUnity discord. While Skript-chat was good enough we need to reflect our rapidly growing community's needs and we will achieve this by taking it to the largest Skript community in place.
This doesn't mean skUnity documentation/forums are handled by the SkriptLang organization as they take part of their own service. We'll still maintain our own documentation at https://skriptlang.github.io/Skript and support any other services such as SkriptHub/Skript-MC to continue taking part of this community!
We have restyled our documentation site! A big thanks to @AyhamAl-Ali for this awesome redesign. You can look at the new documentation site here.
As always, if you encounter any issues please report them at https://github.com/SkriptLang/Skript/issues. If you have any ideas or input for the future development of Skript, you can share those too at https://github.com/SkriptLang/Skript/discussions.
2.6.x
will be the last version working with 1.12 and lower. Security patches and other kind of fixes might be ported to this version, but keep in mind that features won't be added.It's been a bit since our last release, but the wait has (hopefully) been worth it. This release includes many bug fixes, with even more coming in the near future.
You may have noticed some changes around here too. Recently, we updated our issue templates. Our goal is to provide a better user experience through detailed forms and make triage easier for our team by making sure necessary details are included in user reports.
We have also restyled our documentation site! A big thanks to @AyhamAl-Ali for this awesome redesign.
As always, if you encounter any issues please report them at https://github.com/SkriptLang/Skript/issues. If you have any ideas or input for the future development of Skript, you can share those too at https://github.com/SkriptLang/Skript/discussions.
Time for the change log!
null
in string form (https://github.com/SkriptLang/Skript/pull/4264, closes https://github.com/SkriptLang/Skript/issues/2458)With this change, the
me
expression will no longer work in console. To refer to the console using effect commands, simply useconsole
.
<none>
when a world wasn't provided, even though a world is not required (https://github.com/SkriptLang/Skript/pull/4238, closes https://github.com/SkriptLang/Skript/issues/4216)Please note that if a world is not provided to the location function, the default world will be used.