Skript

Logo (200px)

Skript is a plugin that allows you to customize Minecraft's mechanics with simple scripts written in plain English sentences. You can easily create complex custom commands, triggers that execute effects under certain conditions, and scripts that just run periodically - all without having to know even the slightest bit about programming! The (hopefully) intuitive language has the advantage that you don't even need to learn much to be able to use Skript.

To get an idea of what is possible with Skript consider taking a look at the scripts forum where users of this plugin share the scripts they have written themselves, improving their servers without the need for a plugin developer. Skript can also be used to replace smaller plugins, allowing you to shorten your likely long plugin list. An incomplete list of replaceable plugins can be found on the replacers forum.

The latest version of Skript is 2.1.1 (11 March 2014)

Hiatus Notice

Due to having 10 exams this semester I don't have much time and energy to update this plugin, as it has grown quite large over the years. Especially fixing bugs has become tedious due to not being allowed to post download links to new versions (Bukkit rule) to easily verify whether a bug was fixed.

If anyone wants to release bug fixes and/or new features, feel free to do so (e.g. via pull requests to the Github repository). Use Maven to create the jar file, and ask me or DemonPenguin to publish the update here (please make sure to test for any possible bugs, especially when changing or adding much code. Scripts I use for testing can be found here).

Introduction

To write a script you simply have to write down what you want Skript to do when some conditions are met. This is a simple 'event → condition(s) → effect(s)' syntax, which could look like the following example:

# This example informs the player when he mines stone
on mine of stone:
    send "You just mined stone!" to player

Each script can contain many so-called triggers which each start with an event and have a list of as many conditions and effects as you want. The event determines when the conditions are checked, and if all are met, the effects are executed in order. Take a look at the following example which has everything:

# A simple lightning strike/smite/Thor's hammer script:

# the trigger has an event:
on leftclick with a golden axe:
    # a condition:
    player has the permission "thor"
    # and some effects:
    strike lightning at the targeted block
    broadcast "Fear the mighty Thor!"

Custom commands can be defined similarly, e.g. the following defines a powerful '/item' command that can be used like '/item 5 diamond swords of sharpness 5 and a cake':

command /item <items>:
    description: Spawn yourself some items
    permission: skript.item
    trigger:
        give argument to the player

Furthermore Skript also features more complex script elements like loops and conditional statements, which are described in the documentation. Skript also supports variables that can persistently store information globally, per player, per block, etc., and has a wide range of expressions that you can use in conditions, effects, messages and variable names.

A notable feature of Skript are aliases, which are names for Minecraft's items and blocks. Each alias can consist of multiple IDs and data values and allow you to use any item's or block's name in scripts instead of having to use their IDs like many plugins force you to. Along with the ability to define enchanted items you can create some of the possibly most powerful '/item' commands for Bukkit with just a few lines! (two example commands are included in the download)

Need help?

You can always ask for help on the forums, though it can be faster for you and easier for me if you first look through the available tutorials and examples.
If you get many "indentation error"s or "invalid line" errors you should read this explanation to understand what indentation is all about.

Tutorials

If you're new to Skript you should read the basic tutorial. It explains how to write a new script step by step.
In the likely case that the basic tutorial was too short you can read the more exhaustive tutorial by DemonPenguin.
There are also some more official tutorials as well as user-created ones on the tutorials forum.

Documentation

To learn more about writing scripts please read the documentation on my website. There are also lists of all possible events, conditions, effects, expressions and types with examples for each of them.

The Team

  • Njol: Manager & programmer of Skript
  • joeuguce99: Helps programming by adding new features
  • DemonPenguin: Wrote some tutorials and moderates the forums
  • mazius123: Submits tons of bug reports
  • MegaNarwhal: Made the old Skript banner and a signature image

Features

Natural syntax
As you might already have noticed writing scripts is not very difficult. You can write (almost) normal english sentences and Skript will try to interpret them. If Skript doesn't understand something, please check your spelling and/or refer to the documentation to find out how to write your sentence to make Skript understand it.
Custom Commands
Skript can be used to define custom commands. These commands can use Skript's syntax which allows to make very user-friendly commands, like one of the most powerful /item commands available, and any other command you or others come up with. Skript also has a setting to try to interpret all unknown commands as effects. This basically allows to use any effects you can put into triggers as a command.
A short introdution on how to create custom commands can be found on my website.
Please note that Skript is not well suited for creating aliases of other plugins' commands or for creating a command that executes multiple other commands. I suggest to use Commander or some other plugin for this purpose.
Independent Scripts
Triggers can be put into multiple files, and each file is treated independently. This means that you can easily use triggers made by other people by simply copy&pasting their files into the scripts directory. Scripts are thus like small plugins for Skript with the advantage of being able to edit them easily.
You can find some scripts on the forums, and you can also post your own. Please read the Guidelines before posting a file.
Item and Block Aliases
Aliases help to make the config more user-friendly by using comprehensive names for items and blocks, e.g. you can write 'bonemeal' instead of '351:15', or 'any hoe' instead of listing all hoe types. Aliases support data value ranges and can even consist of multiple types. You can easily define your own aliases, e.g. 'blacklisted = TNT, bedrock, obsidian, monster spawner, lava, lava bucket' and there are also many useful predefined aliases in the main config.
Error Handling
Skript automatically logs errors in the scripts to the console, e.g. if it can't understand a line of a trigger. It will not cease operation, but simply skip the invalid parts of the scripts, be it a whole trigger (e.g. if the event is invalid) or just a single condition (e.g. if there's a typo in the condition's name). This might lead to unexpected behaviour, so always check for errors in the console after you have changed something.
If you use the '/skript reload' command all errors will be sent to the player who used the command (or printed to the console if the command was used from there).
Automatic Update
Skript can detect new versions and update itself, either by a command (/skript update) or automatically when the server starts. You can turn the automatic check on or off, configure whether to check for updates only, and choose whether to download them as well in the config file. If a new version is found, all players with the permission 'skript.admin' will get notified of the new version.
Extensible
Java developers can add their own conditions, effects and variables using a provided API.

Future Features

More events/effects/conditions/expressions/loops/etc.
I'm always looking for ideas ;)
Triggers which are executed when a player presses a specific button, steps on a predefined pressure plate, etc.
This sounds awesome but will definitely take a while.
Full list of planned features:
https://github.com/Njol/Skript/issues?labels=new+feature&state=open
What I'm currently working on:
https://github.com/Njol/Skript/issues/assigned/Njol?state=open

Permissions

Skript works without permissions plugins, but It also provides some permission in case you use one:

skript.admin
Grants access to the /skript command.
skript.effectcommands
Allows to use effects as commands if effect commands are enabled in the config.

You can also use the '<player> has/doesn't have the permission "permission.here"' condition in scripts to check whether a player has/doesn't have a certain permission. You can even create your own permissions this way, but you should note that "mypermissions.*" does not give all permission that start with "mypermissions." (The exception to this rule are other plugins' "*" permissions and any permissions starting with "skript.").

Download

To install or update Skript, download the latest Skript.jar and save it in your server's plugin directory. If you're installing Skript for the first time, start & stop your server once to generate the config files and some example scripts.

Please read the changelog when updating, and create a backup of your database(s) just to play it safe.

You can also download the newest aliases-english.sk and aliases-german.sk (updated to Minecraft 1.7.2).

The source code can be found on github.

Donations

If you like the plugin feel free to make a donation :)

Changelog

v2.1.1 (11 March 2014)

Main Change
Fixed most (if not all) database issues.
Please still create a backup of the old variables table just to play it safe.
Part of the fix required to save and load all variables on the main server thread, i.e. performance may suffer.
Improvements
Changed the updater to adhere to the new Bukkit guidelines
Improved the automatic config updating
Should be compatible with Java 6 again
Decreased chances of errors due to improved automatic code analysis
Added a workaround to be able to remove a player's tool in a click event
Added workaround to make Skript more compatible with mods that dynamically change enums via reflection. If they do this improperly Skript will still not be compatible with them however.
Added some 1.7 block to the code
Improved/fixed visual effects
Improved expression lists
Added an error on an unsuccessful hook into another plugin
Improved regions support
Added expression 'me' that can only be used in effect commands
Improved documentation generation
Improved effect commands
Added 'luck' and 'lure' enchantments now that Bukkit supports them
Fixes
Fixed configs only working with tabs. You can now use any indentation again, and even use different types in one file.
Fixed some other minor config related issues
Fixed error reporting not reporting the whole error
Fixed the pressure plate event to also fire for golden and iron pressure plates
Fixed a few issues with custom language files
Fixed "neither ... nor ..." not working as expected
Fixed some log-related errors and fixed some log messages that didn't appear at all
Fixed not complaining about storing an entity or other non-serialisable data in list variables
Fixed the Bukkit command registration hack to work in 1.7.2 R0.4 as well
Fixed effect command to use english
Code Related
Slightly improved directions
Minor performance improvements
Added draft for sound support
Removed script caching completely, as it never worked anyway. This might break addons.
Added some more comments to the API

2.1 (17 December 2013)

Note
this release includes two changes to how variables are saved, thus please test saving and loading variables on a test server before updating Skript on your main server (especially if you're using a database - but make sure to configure the test server to access a different database!)
added support for multiple databases (this also allows to define variables that won't be saved at all)
variables are no longer saved as text but in binary
Improved support for regions plugins:
supported plugins: WorldGuard, Factions, PreciousStones, and GriefPrevention
new expressions: members/owner(s) of %region%, regions at %location%, block in %region%, the region
new event: on region enter/exit
new condition: %player% is member/owner of %region%, %region% contains %location%
use regions in scripts like 'region "region name", or save them to variables and use the variables instead
New Expressions
experience, index of %text% in %text%, join/split %text% by/at %text%, length of %text%, subtext of %text% between %number% and %number%, first/last %number% characters of %text%, max stack size of %item%, line %number% of lore of %item%
New Effects
play effect (plays entity and particle effects), force %entity% to dismount
Fixes and Improvements
dropped items, falling blocks, and thrown potions can now have item types (e.g. falling dirt, dropped arrow)
horse variants (mules, donkeys, etc.) can now be distinguished. colours and decorations are not supported yet.
pigs can now be equipped with saddles, and horses can be equipped with saddles, horse armour, and chests
added ability to shoot projectiles from any location, not just from entities
added ability to directly change the id of an item or block
added warning when using 'items in {var::*}'
added ability to change the passenger of a vehicle and vice versa
'on experience spawn' is now called when fishing as well
the shooter of a projectile can now be changed
biomes can now be changed
added a warning if a variable is assigned a value that cannot be saved
'colour of ...' might now work with more items (e.g. stained glass), but this depends on Bukkit
improved localisation, mostly in regards to aliases
improved changing expressions
improved all expressions that have multiple time states when used with expression lists to return the expected value
improved the 'parse' expression
several small improvements to parsing
fixed "<%color expressions%>" in text not working
and many bug fixes

Older changelog can be found in the respective files.




Comments

Please don't use the comments to ask questions, report a bug or issue, or suggest a new feature, as comments can get extremely unorganized very quickly.
Use the help forum instead if you have a question, the suggestions forum for feature requests, or create a ticket to submit a bug report.

You must login to post a comment. Don't have an account? Register to get one!

  • Avatar of skull4949 skull4949 Jul 31, 2014 at 15:12 UTC - 0 likes

    Whenever i try to update skript from 2.0 to anything above it, i get this error message. http://pastebin.com/X7bBkFrt i have java 7 installed and have 1.7.4 beta build installed. if this does anything, I'm on a mac also.

  • Avatar of joeuguce99 joeuguce99 Jul 30, 2014 at 12:45 UTC - 0 likes

    @hureimu1235: Go

    Use 'dye the player's boots (0, 0, 0)' or 'dye the player's boots black'.

    Yep. I'm from Mexico. Why Pitcarin? It's awesome. xD

  • Avatar of hureimu1235 hureimu1235 Jul 30, 2014 at 10:08 UTC - 0 likes

    Although I performed "dye player's Boots 0, 0, and 0", an error comes out. Why?

  • Avatar of sjoerdtim sjoerdtim Jul 29, 2014 at 13:03 UTC - 0 likes

    Owner of the Empire War Network
    Join us at http://www.empirewar.org/

  • Avatar of pilvimaa pilvimaa Jul 28, 2014 at 22:05 UTC - 0 likes

    @hureimu1235: Go

    If you mean "a command" then use numbers/integers as arguments for the command and use location at expression. Should work just fine.

  • Avatar of hureimu1235 hureimu1235 Jul 28, 2014 at 11:23 UTC - 0 likes

    What what should be done with for carrying out a Teleport to the coordinates specified using the command?

  • Avatar of hureimu1235 hureimu1235 Jul 28, 2014 at 11:20 UTC - 0 likes

    Can it arrange into the slot which specified the item?

  • Avatar of selfservice0 selfservice0 Jul 27, 2014 at 18:17 UTC - 0 likes

    @pilvimaa: Go

    Where can I get the 1.7.3 skript?

  • Avatar of pilvimaa pilvimaa Jul 27, 2014 at 10:21 UTC - 0 likes

    @selfservice0: Go

    The latest 1.7.3-snapshot works just fine with 1.7.10 - except for all the hundreds of unfixed bugs - some of which are pretty serious - that Njol got tired of fixing.

    There is a community fork in the works, but AFAIK the last I heard they haven't even been able to make the source code compile. Lol. So I wouldn't hold my breath. Probably MC 1.8 update is going to be the end of the line for Skript because of all the major changes it contains.

    So either work around the bugs and stay at 1.7.10. + 1.7.3-snapshot or kiss Skript goodbye and get back to lame-ass java programming or some other half-assed bubble gum patch lua/whatever scripting language.

    It's rather depressing, ain't it?

    But I don't think "please" is going to make a world of difference here.

    Last edited Jul 27, 2014 by pilvimaa
  • Avatar of selfservice0 selfservice0 Jul 25, 2014 at 04:20 UTC - 1 like

    Please update for 1.7.10!!

How should Skript spawn mobs by default, e.g, when using 'spawn zombie'?

  1. Choice:

  1. Results
  2. 12 comments

Facts

Date created
Sep 14, 2011
Categories
Last update
Mar 19, 2014
Development stage
Release
Language
  • deDE
  • enUS
License
GNU General Public License version 3 (GPLv3)
Curse link
Skript
Downloads
63,003
Recent files

Authors