dragonroll/documentation/docs/firstplugin.md
BinarySandia04 6b558b2e3d
All checks were successful
test / run-tests-client (push) Successful in 20s
test / run-tests-backend (push) Successful in 16s
Better docs
2024-10-11 12:50:46 +02:00

2.3 KiB

This guide will help you through creating a plugin for Dragonroll

Downloading the example plugin

The quickest way to start a plugin is starting from the example plugin template that you can find in this repository. Every Dragonroll plugin has the following file structure:

/your-plugin/
├── plugin.json
├── client
│   └── main.js
│   └── ...
├── backend
│   └── main.js
│   └── ...
├── locales
│   └── en-US.json
│   └── ...
└── public
    └── icon.png
    └── ...
  • The plugin.json contains basic information about your plugin, and also the entrypoints that Dragonroll will use to load and initialize the plugin
  • The client folder contains all the code of your plugin that is relative to the client
  • The backend folder contains all the code that is relative to the server
  • The locales folder contains the translation files for your plugin
  • The public folder contains all the media that will be publicly available for your plugin client

The plugin.json file

Your plugin.json file defines important information about your plugin, like its name, package, authors, entrypoints, and other information

Important: The package field must be identical to the name of the folder containing your entire plugin

plugin.json

{
    "package": "your-plugin",
    "name": "My custom plugin",
    "description": "This is my first custom plugin",
    "authors": [
        {
            "name": "Aran Roig"
        }
    ],
    "version": "1.0",
    "client": {
        "entrypoint": "main.js"
    },
    "backend": {
        "entrypoint": "main.js"
    }
}

Entrypoints

When Dragonroll registers a plugin, it calls the Main method of the file specified in the entrypoint field inside the plugin.json, so if you don't export a function with that name your plugin won't load. Dragonroll passes its entire API through the main method

client/main.js and backend/main.js

function Main(Api){
    console.log("Hello World!");
}
export { Main };

In the client entrypoint, the Api variable will be a ClientApi object. In the backend entrypoint, the Api will be instead a BackendApi object.