`.
+
+## Registering by Class
+
+```java
+commandManager.registerSuggestion(LocalDate.class, (sender, context) -> List.of(LocalDate.now(), LocalDate.EPOCH)); // suggest today's date and epoch date
+```
+That's all for registering with class types! Now this will be the default suggestion resolver for LocalDate arguments.
+
+## Registering with Suggestion Keys
+
+```java
+commandManager.registerSuggestion(SuggestionKey.of("formatted-dates"), (sender, context) -> {
+ var pattern = DateTimeFormatter.ofPattern("dd/MM/yyyy");
+ return Stream.of(LocalDate.now(), LocalDate.EPOCH).map(pattern::format).toList(); // suggest dates in a different format
+ })
+```
+
+Now that the suggestion is registered, we must annotate the argument.
+```java
+void execute(Sender sender, @Suggestion("formatted-dates") LocalDate date) {
+ // command logic here
+}
+```
diff --git a/triumph-cmds/2.x.x-S/3-customization/group.conf b/triumph-cmds/2.x.x-S/3-customization/group.conf
new file mode 100644
index 0000000..7286f4d
--- /dev/null
+++ b/triumph-cmds/2.x.x-S/3-customization/group.conf
@@ -0,0 +1,11 @@
+header = "Customization"
+pages = [
+ {
+ header = "Messages"
+ link = "messages"
+ }
+ {
+ header = "Requirements"
+ link = "requirements"
+ }
+]
diff --git a/triumph-cmds/2.x.x-S/3-customization/messages.md b/triumph-cmds/2.x.x-S/3-customization/messages.md
new file mode 100644
index 0000000..4439e93
--- /dev/null
+++ b/triumph-cmds/2.x.x-S/3-customization/messages.md
@@ -0,0 +1,30 @@
+Messages
+Customization of error/invalid usage messages.
+
+---
+
+# Messages
+The library provides many messages that are configurable through a simple structure. Any message that you modify
+will be handled using the function and syntax displayed below in the example provided.
+
+```java
+commandManager.registerMessage(MessageKey.INVALID_ARGUMENT, (sender, context) -> {
+ // handle sending the error message
+});
+```
+
+Different use-cases provide different applicable keys. You can find a list of all available keys for each module below.
+
+## Universal Keys
+Universal keys are accessed through the `MessageKey` class.
+* `INVALID_ARGUMENT`
+* `TOO_MANY_ARGUMENTS`
+* `NOT_ENOUGH_ARGUMENTS`
+* `UNKNOWN_COMMAND`
+
+## Bukkit Keys
+Bukkit keys are accessed through the `BukkitMessageKey` class.
+* `NO_PERMISSION`
+* `PLAYER_ONLY`
+* `CONSOLE_ONLY`
+
diff --git a/triumph-cmds/2.x.x-S/3-customization/requirements.md b/triumph-cmds/2.x.x-S/3-customization/requirements.md
new file mode 100644
index 0000000..5f614bb
--- /dev/null
+++ b/triumph-cmds/2.x.x-S/3-customization/requirements.md
@@ -0,0 +1,28 @@
+Requirements
+Command Requirements
+
+---
+
+# Requirements
+Requirements give fine control to determine whether or not a sender is allowed to run a command.
+
+## Example of requirements
+Firstly, we need to register the requirement.
+```java
+commandManager.registerRequirement(RequirementKey.of("example"), (sender) -> {
+ // requirement logic here
+ return hasPermission(sender);
+ })
+```
+
+Now we need to add the requirement to our command.
+```java
+@Requirement("example")
+void execute(Sender sender) {
+ // command logic here
+}
+```
+## Additional Info
+* Multiple requirements can be added to a command by wrapping them in a `Requirements` annotation.
+* A `MessageKey` can be used in the requirement to send messages to the user upon not meeting the requirement. add the message key string to the parameters!
+* Requirements can be inverted by adding a `boolean` to the annotation.
diff --git a/triumph-cmds/2.x.x-S/version.conf b/triumph-cmds/2.x.x-S/version.conf
new file mode 100644
index 0000000..857baad
--- /dev/null
+++ b/triumph-cmds/2.x.x-S/version.conf
@@ -0,0 +1,3 @@
+reference = "2.x.x-S"
+recommended = true
+stable = false
diff --git a/triumph-cmds/icon.png b/triumph-cmds/icon.png
new file mode 100644
index 0000000..efa3b07
Binary files /dev/null and b/triumph-cmds/icon.png differ
diff --git a/triumph-cmds/project.conf b/triumph-cmds/project.conf
new file mode 100644
index 0000000..d40deb6
--- /dev/null
+++ b/triumph-cmds/project.conf
@@ -0,0 +1,4 @@
+id = "triumph-cmds"
+name = "Triumph CMDs"
+color = "#b53c56"
+projectHome = "https://github.com/TriumphTeam/trumph-cmds"
diff --git a/triumph-gui/3_x_x/0-welcome/introduction.md b/triumph-gui/3_x_x/0-welcome/introduction.md
index 6eef3aa..551310c 100644
--- a/triumph-gui/3_x_x/0-welcome/introduction.md
+++ b/triumph-gui/3_x_x/0-welcome/introduction.md
@@ -1,7 +1,7 @@
Introduction
-
-This is just an example text for now.
-
+Library for creating simple GUIs in Bukkit plugins.
+
+---
@@ -14,10 +14,6 @@
-!!!!
-Attention! This version of the Docs is WIP and incomplete.
-!!!
-
---
# Features
diff --git a/triumph-gui/3_x_x/1-started/setup.md b/triumph-gui/3_x_x/1-started/setup.md
index 800125b..9d7219a 100644
--- a/triumph-gui/3_x_x/1-started/setup.md
+++ b/triumph-gui/3_x_x/1-started/setup.md
@@ -1,9 +1,9 @@
Setup
-
-This is how you add the lib to your project.
-
+Adding the library to your project.
--+-
+---
+
+-+-
+Gradle (Kotlin)+
You need to add the dependency to your `build.gradle.kts`.
diff --git a/triumph-gui/3_x_x/2-types/gui.md b/triumph-gui/3_x_x/2-types/gui.md
index 14d4d54..dcdb1de 100644
--- a/triumph-gui/3_x_x/2-types/gui.md
+++ b/triumph-gui/3_x_x/2-types/gui.md
@@ -1,7 +1,5 @@
GUI
-
-This is how you create a basic GUI
-
+This is how you create a basic GUI
# GUI
diff --git a/triumph-gui/3_x_x/2-types/pagegui.md b/triumph-gui/3_x_x/2-types/pagegui.md
index e0c9bb7..1761dbf 100644
--- a/triumph-gui/3_x_x/2-types/pagegui.md
+++ b/triumph-gui/3_x_x/2-types/pagegui.md
@@ -1,7 +1,5 @@
PaginatedGUI
-
-Simple GUI that allows you to have multiple pages and navigate between them.
-
+Simple GUI that allows you to have multiple pages and navigate between them.
# Paginated GUI
diff --git a/triumph-gui/3_x_x/2-types/scrollgui.md b/triumph-gui/3_x_x/2-types/scrollgui.md
index d962a7e..fbd2463 100644
--- a/triumph-gui/3_x_x/2-types/scrollgui.md
+++ b/triumph-gui/3_x_x/2-types/scrollgui.md
@@ -1,8 +1,5 @@
ScrollingGUI
-
-Simple GUI that allows you to scroll on a Paginated GUI instead of going page
- by page.
-
+Simple GUI that allows you to scroll on a Paginated GUI instead of going page by page.
# Scrolling GUI
@@ -23,6 +20,6 @@ ScrollingGui gui = Gui.scrolling()
The scrollType if not specified will fall back to `ScrollType.VERTICAL`
-Just like the normal [GUI](gui.md) the first parameter is the rows the GUI should have. Like the [Paginated GUI](pagegui.md) the second parameter is to specify the page size, as in how big the page should be, in the example above it's 45 slots dedicated for the page.
+Just like the normal [GUI](gui) the first parameter is the rows the GUI should have. Like the [Paginated GUI](pagegui) the second parameter is to specify the page size, as in how big the page should be, in the example above it's 45 slots dedicated for the page.
-Everything else about this GUI is exactly like the [Paginated](pagegui.md).
+Everything else about this GUI is exactly like the [Paginated](pagegui).
diff --git a/triumph-gui/3_x_x/2-types/storagegui.md b/triumph-gui/3_x_x/2-types/storagegui.md
index 62d7136..386c8a9 100644
--- a/triumph-gui/3_x_x/2-types/storagegui.md
+++ b/triumph-gui/3_x_x/2-types/storagegui.md
@@ -1,7 +1,5 @@
StorageGUI
-
-GUI that does not clear its items on close/open, any external non GuiItem added to it will stay.
-
+GUI that does not clear its items on close/open, any external non GuiItem added to it will stay.
!!!!
Attention! Items stored inside this GUI will not Persist on Server Restart.
@@ -22,8 +20,8 @@ StorageGui gui = Gui.storage()
.create();
```
-Just like the normal [GUI](gui.md) the first parameter is the rows the GUI should have.
+Just like the normal [GUI](gui) the first parameter is the rows the GUI should have.
# Adding the item to the GUI
-Differently to the normal [GUI](gui.md), the `addItem` method takes an `ItemStack` instead. Any `GuiItem` added will have actions applied to it, the persistent items are simple ItemStacks that have nothing associated to it.
+Differently to the normal [GUI](gui), the `addItem` method takes an `ItemStack` instead. Any `GuiItem` added will have actions applied to it, the persistent items are simple ItemStacks that have nothing associated to it.
diff --git a/triumph-gui/3_x_x/3-additional/features.md b/triumph-gui/3_x_x/3-additional/features.md
index b016e90..a84a7a2 100644
--- a/triumph-gui/3_x_x/3-additional/features.md
+++ b/triumph-gui/3_x_x/3-additional/features.md
@@ -1,7 +1,5 @@
GUI Features
-
-After the basics of a GUI there is a lot more useful features you can use.
-
+After the basics of a GUI there is a lot more useful features you can use.
# Common features