JavaScript scripts are executed with this customized fork of Mozilla’s Rhino collection. Our custom fork supports numerous ES6 and ESNEXT features. For the (nearly) complete feature list,check our compatibility dining table;
To setup ct.js, all you need to do is put the ct.js jar into your mods folder, and launch Minecraft. By default, ct.js modules are stored in, but this is changed within the configuration. To access the ct.js settings, type /ct settings in game. The remainder with this tutorial will refer to this directory while the «modules directory», and certainly will assume it is within the standard location.
Developing a module
To make a module, produce a folder in your modules folder. The folder can have whatever name you would like, but typically it’s simply the true name of this module. Our module will be called ExampleModule. Our folder structure now l ks like . .
The metadata file
All modules should have a metadata.json file. This file contains information about our module. You can observe an illustration of the file to your right. The metadata file has a range important industries, documented here
- name The name for the module
- creator The title associated with creator that is module
- version The version of the module. This will conform to SEMVER
- entry this is actually the name of the file that will actually be ran. This key is important if, for instance, your module registers triggers or commands. This field is needed for several modules that need to run code, without it your module will NOT run. If all of your module provides is just a collection that other modules may use, this isn’t needed.
- requires a myriad of names of other modules that your particular module is dependent upon. These modules are assured to be loaded before your module, enabling you to use them straight.
- asmEntry and asmExposedFunctions These will likely be talked about later into the ASM part
Scripting
We have now need to produce our script files. Typically, the main file of your module is termed index.js . This can be a web development practice that is general. You can name your files whatever your want, but one advantageous asset of having an index.js file is that if somebody tries to import from your own module folder directly, in the place of a specific file in your module, it’ll be brought in through the index.js file, if one exists. If no index.js file exists, others will have to import directly through the files themselves.
The Fundamentals
Registering a Trigger
We register A worldload trigger like so
The argument passed into the register function may be the function you need to trigger
You could register an anonymous function for ease
In ctjs, «triggers» are events that get fired when a action that is certain in game, such as for instance a sound being played or a chat message being sent. Let’s start with among the simplest causes WorldLoad. To be able to register a trigger, we use the register function that is provided. It requires the trigger title while the first argument (case-insensitive), as well as the function to run once the argument that is second. You can see a complete listing of these triggers on our javadocs, under IRegister .
Now any rule inside of our exampleWorldLoad trigger are ran every time a global world is packed. From right here, you can do a lot of things, such as reaching Minecraft methods or information that is getting arguments that particular triggers may pass in.
Trigger arguments
Preparing a trigger to intercept messages
Show «Pong!» in reaction up to a message sent»ping that is containing
Along with helping you discover whenever an event has occurred by calling your function, many triggers move across more information about their respective event. Let us a trigger that is different MessageSent. This trigger is fired every time a message is sent by a player.
Let’s produce a trigger that, whenever the player sent a note with all the word «ping», shows the message «Pong!». To carry out this, we must accept the arguments passed away in by the MessageSent trigger. You can view most of the arguments that the trigger passes through within the javadocs linked above. The MessageSent trigger passes in the message event therefore the real message.
Many causes are cancellable, meaning that they actually fire prior to the occasion in question takes place. In our case, our MessageSent trigger will fire ahead of the chat message is really sent. Cancelling the event is as simple as calling cancel(event) , nonetheless we will not do this here.
We’re thinking about the message parameter. We simply check if it has the term we are interested in, and if therefore, we make use of the ChatLib utility to send a message just noticeable to the player. It is possible to read more in regards to the ChatLib energy right here
Module Organization
ES6 style import syntax (preferred)
When creating a module, you will need to understand how ct.js loads your files them efficiently so you can organize. As s n as your module is packed, just the file specified while the entry in metadata.json is packed. Virtually any rule you need to run must certanly be imported, through the need syntax, or ES6 style import syntax.
ChatLib
The ChatLib is really a utility supplied to imports for reaching Minecraft chat. It’s functionality to deliver, edit, and delete communications in Minecraft’s talk. You can create clickable, and hoverable, text in chat, run commands, and many other things.
Sending messages
This sends a note in talk
This first instance shows how exactly to show a chat message that is basic. This message differs from normal messages for the reason that it does NOT trigger chat triggers. It is also maybe not noticeable to other players.