# Feature Overview

General Features

The goal of Delegate is to be a command framework that is intuitive, lightweight but also feature-rich. At it's core, Delegate supports all features supported by other command frameworks, which include:

* Commands (& sub-commands)
* Argument parsing and resolving
* Automatic command registration (no need for command definitions in the `plugin.yml`)
* Tab-completion

Furthermore, Delegate introduces  many other features which separate Delegate from other run-off the mill command frameworks. These features include:

* Actions - Allow you to separate tasks when executing a command
* Triggers - Special actions if a command succeeds/fails
* Translations - Built-in localization utilities

<details>

<summary>List of features</summary>

* Command (& sub-command) creation/handling/registration
* Argument parsing/validation/type & context resolving/rule-checking
* Tab-completion
* Separable (context-based) actions
* Command triggers
* Built-in translations API
* Automated command help-formatting
* Command histories
* Command permissions
* Command macros
* Command timers
*

</details>

## Development Features

#### Paradigms

Programming is an artform. Many developers prefer to use different programming paradigms. Therefor, Delegate offers two paradigms to construct commands to make it easier to switch from one command framework to another.&#x20;

* The [fluent-interface](https://en.wikipedia.org/wiki/Fluent_interface) design allows you to use a builder-like paradigm to construct commands.
* The annotation-driven design allows you to build commands using annotations, reminiscent of various other popular command frameworks.&#x20;

#### Platform-agnostic Implementation

Delegate's core is built to be platform agnostic. This allows Delegate to provide support for various server platforms. The following platforms are included (or planned):

* Bukkit/SpigotMC
* Paper
* Velocity (WIP)
* Sponge (Planned)
* BungeeCord (Planned)
* Waterfall (Planned)

Besides the fact that it is platform agnostic, it also allows for integration with other frameworks:

* [Mojang Brigadier](https://github.com/Mojang/brigadier) - Mojang's custom command framework
* [Java Discord API (JDA)](https://github.com/DV8FromTheWorld/JDA) - Provides REST-wrappers for the Discord REST API

#### Logging

While developing, you can enable logging so that you can easily see what it happening under the hood if something goes wrong.&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://rocketpencil-studios.gitbook.io/delegate/delegate-framework/feature-overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
