- Java 17
- Basic knowledge of programming with Java
{% tabs %} {% tab title="Maven" %}
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<dependency>
<groupId>de.ree6</groupId>
<artifactId>Ree6</artifactId>
<version>VERSION</version>
</dependency>
{% endtab %}
{% tab title="Gradle" %}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
dependences {
implementation 'de.ree6:Ree6:VERSION'
}
{% endtab %} {% endtabs %}
To create a plugin you will need to first make a class that we will use as our "Main Class".
This class needs to extend the class called ReePlugin
.
Here is an example of how your main class might look!
public class MyAwesomePlugin extends ReePlugin {
public MyAwesomePlugin(ReePluginContext context) {
super(context);
}
}
After extending the ReePlugin
class, we can go and implement all the new methods we have!
To be exact we have 3 new methods, the first one will be start
then comes stop
and at the end, we have delete
.
This method will be called when the plugin is being run by Ree6 and everything is successfully loaded.
This one will be called when you stop the plugin this includes situations where you delete or unload it via the Plugin Manager.
This will only be called when the Plugin Manager is asked to delete the given plugin, so you have a chance to give a goodbye message or something.
Once you implement the methods you want to use it should look something like this!
public class MyAwesomePlugin extends ReePlugin {
public MyAwesomePlugin(ReePluginContext context) {
super(context);
}
@Override
public void start() {
super.start();
System.out.println("Start!");
}
@Override
public void stop() {
super.stop();
System.out.println("Stop!");
}
@Override
public void delete() {
super.delete();
System.out.println("You want to delete me :C ?");
}
}
To create a command we need to first understand the concept behind the Ree6 Command System.
We have a CommandManager
which is handling all the internal works like command parameter parsing and more!
For a command, we need to create a class that implements the ICommand
class and has the Command
Annunciation.
Let's make a command together called PongCommand
:
@Command(name = "ping", description = "Answer with Pong!", category = Category.FUN)
public class PongCommand extends ICommand {
@Override
public void onPerform(CommandEvent commandEvent) {
}
@Override
public CommandData getCommandData() {
return null;
}
@Override
public String[] getAlias() {
return new String[0];
}
}
When creating the commands you will need to implement these 3 methods to work with them.
The onPerform
method is where you are going to do most of the stuff.
I will give you a CommandEvent
parameter which will contain information like:
- Has this Command been executed as SlashCommand?
- Who executed this Command?
- In which Guild has this Command been executed?
Now, let's continue with our work!
Since we want the Bot to respond with Pong!
when someone writes /ping
or ree!ping
We need to go into the onPerform
method and respond to it!
For this, we can use the internal reply method, just like this!
@Override
public void onPerform(CommandEvent commandEvent) {
commandEvent.reply("Pong!");
}
Well now that we finished our great PongCommand
we will need to register it!
Unlike the old Addon system, we don't need to manually register it!
The new plugin system will automatically detect that the plugin has a few classes that implement the interface and register them!
To let Ree6 know where to look you will need to create a plugin.yml
!
In this, you will need to add the name of the plugin, the author's name, the path to the main class, the version of the plugin, and the version of Ree6 it has been made for!
For example, a correct plugin.yml
would look like this:
id: Pong Command
description: Very cool pong command!
version: 1.0.0
requires: 4.0.0
provider: Presti
class: de.presti.cooladdon.MyAwesomeAddon
license: MIT
dependencies: []
You should be ready to go with your plugin!
Now you will need to export it either via Maven, Gradle, or any desired way you have!
On how to load the plugins refer to installing-plugins.md