Please note that this is the old documentation on the last version of Skript I released in 2014.
For up-to-date documentation, please visit the SkriptLang docs, the Skript Hub docs, or the skUnity docs.
For up-to-date documentation, please visit the SkriptLang docs, the Skript Hub docs, or the skUnity docs.
Getting Started
Before you can start writing scripts you should download and install Skript:- Download the latest Skript.jar
- Put the jar into your server's ‘plugin’ directory
- start & stop the server once to generate the config files and some example scripts
Writing a trigger
Before you even open an editor I recommend that you already know what kind of trigger you want to write, but you can also simply start writing. In this tutorial I will explain how to write a trigger similar to the one inplant with hoe.sk
which is included in the download: a trigger which plants seeds when one right-clicks soil with a hoe.To start, open a text editor, e.g. Notepad. Now think about when you want your trigger to activate. In this example we need a right click, so we write that on the first line:
on right click:If you can't think of an event or need inspiration you can find a list of all events here.
But we don't want to activate the trigger every time someone right-clicks, but only if a player right-clicks on farmland holding a hoe, thus we should change the event:
on right click on soil holding a hoe:We could also leave the event as-is and add two conditions instead:
on right click: block is soil player is holding a hoeIt is up to you which version you like more, I will continue using the first one in this tutorial.
Now we should check whether the player actually has seeds he could plant:
on right click on soil holding a hoe: player has seedsPlease note that the next line after the event is indented. This makes the line belong to the trigger we're writing and also makes scripts much easier to read. If you do not correctly indent conditions and effects you will get errors when the script loads as they do not belong to any trigger.
After that we should be able to plant the seeds as we made sure that the player did everything correctly, right?
on right click on soil holding a hoe: player has seeds set block above the clicked block to cropsThis is not exactly true as there might be a block where we want to plant the seeds:
[_] <- some block [_] <- clicked soil blockIf we simply set that block to crops we might override a block. This could be used by griefers to break into other people's houses or even destroy bedrock.
Such problems are not always obvious but can cause triggers to misbehave. You can eliminate many problems by testing the triggers on a test server before using them on your main server.
This particular problem is solved by testing whether the block above the soil is empty before setting it to crops:
on right click on soil holding a hoe: player has seeds block above the clicked block is air set block above the clicked block to cropsNow don't forget to remove the seeds from the player if you don't want your players to plant seeds for free:
on right click on soil holding a hoe: player has seeds block above the clicked block is air set block above the clicked block to crops remove seeds from player
The last thing remaining is to save the trigger in the plugins/Skript/scripts/ directory. You can choose any name you want, but it should not start with a hyphen, as files starting with a hyphen are not loaded, and the file extension has to be .sk. You could e.g. save this tutorial's trigger as
simple plant with hoe.sk
.Now start your server (which is preferably a test server, i.e. not your main server), check whether any errors appear in the console and fix them if there are any. Then log into the server and test the script to find out whether everything works as intended. When you're done testing copy the script to your main server to let your players use it.
You can also use the command ‘/skript reload’ to make Skript reload all scripts or a specific script, which is useful if you don't want to restart the server after changing a script. All errors that occur during the reload will be sent to the player that uses the command, or logged to the console if the console used the command.