# Welcome to sarry20 Wiki

Welcome to our wiki, where you can find information about all our plugins.

If you have any questions you also have our support discord.

We hope you find everything you are looking for, if not please contact us by discord.

## Quick links

{% content-ref url="/pages/DJCWu21aF0eLUQ73uUPN" %}
[Minions](/products/minions)
{% endcontent-ref %}

{% content-ref url="/pages/AtmJHJz4iBRePdBvzM51" %}
[Collections](/products/collections)
{% endcontent-ref %}

{% content-ref url="/pages/GT5tHfnyObOb36m2XrxF" %}
[BossSlayer](/products/bossslayer)
{% endcontent-ref %}

{% content-ref url="/pages/SdPmHGaU0NxnjWtamwhW" %}
[VBank](/products/vbank)
{% endcontent-ref %}


# Terms of services

1. **You&#x20;**<mark style="color:red;">**cant**</mark>**&#x20;redistribute the plugins.**
2. **You&#x20;**<mark style="color:red;">**cant**</mark>**&#x20;decompile the plugins.**
3. **I can refuse to help you&#x20;**<mark style="color:red;">**without reason**</mark>**.**
4. **The plug-ins is&#x20;**<mark style="color:red;">**not transferable or interchangeable**</mark>**.**
5. **We do&#x20;**<mark style="color:red;">**not admit money refunds**</mark>**.**
6. **I&#x20;**<mark style="color:red;">**can update**</mark>**&#x20;this Term Of Service&#x20;**<mark style="color:red;">**without notifying you**</mark>**.**


# Minions

<figure><img src="https://1586766809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoyJVkonvFSGJ9CJuynNI%2Fuploads%2FavR7Mz71oVFI7oMEN40j%2FTopMinionsV2Title.png?alt=media&amp;token=7a838ecd-2962-48a6-a4a8-d66da84bc4a6" alt=""><figcaption></figcaption></figure>

**MINIONS** is a plugin that allows us to **implement minions** that will do the **work of mining, logging, fishing, farming and killing mobs**, they can also **store all the materials in their inventories** allowing us to **collect all the materials** obtained by the Minions.

When you place a Minion, it will take care of getting the materials you need without having to worry about being connected.

This plugin offers more content for players and it is kept up to date and via our support discord you easily can get help, or just shoot your question.

We will also keep an eye on the feedback you give us to continue implementing new features to Minions.

<figure><img src="https://1586766809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoyJVkonvFSGJ9CJuynNI%2Fuploads%2FMwaYOueOe6PPGWUNZIJn%2FText%206.png?alt=media&amp;token=046800c1-a031-4994-8690-a8d77b2145e9" alt="https://discord.gg/GGdxNGQRqN"><figcaption></figcaption></figure>

<https://discord.gg/GGdxNGQRqN><br>


# Installation

1. Download the [TopMinions plugin](https://www.spigotmc.org/resources/topminions-%E2%9C%85-the-best-minions-plugin-%E2%AD%95-very-optimized-%E2%9A%99%EF%B8%8F-fully-customizable-1-18-1-20-4.111627/).
2. Add TopMinion.jar to your plugins folder.&#x20;
3. Turn on the server to generate the configs
4. Go to our [Discord Server](https://discord.gg/GGdxNGQRqN) to get a license
5. Setup your license on **config.yml**
6. Enjoy your new companions!

{% hint style="warning" %}
ALERT: In some updates it will be necessary to delete the config files for it to generate the new stuff. You will be notified with each update.&#x20;
{% endhint %}


# Configuration

## **Information about Configs**

The minions [level system](/products/minions/upgrades) is configurable, you can create, delete or edit any of them.

| Minion Config Options   | Expected Value                                                                     |
| ----------------------- | ---------------------------------------------------------------------------------- |
| Material                | [Material Enum](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html) |
| Type                    | Minion Type                                                                        |
| DisplayItem.Glow        | Boolean                                                                            |
| DisplayItem.DisplayName | String                                                                             |
| DisplayItem.Lore        | String List                                                                        |
| HolographicMessages     | String List (Requires Any [Hologram Plugin](/products/minions/dependencies))       |
| SmeltedMaterial         | Material                                                                           |

To see Minion Upgrades config options go to [level system](/products/minions/upgrades)

{% code title="IRON\_ORE.yml" lineNumbers="true" %}

```yaml
# ////////////////////////////////////////////////////////////////////////////////////////////////////  # 
#                              INFORMATION ABOUT IRON_ORE MINER MINION 
# ////////////////////////////////////////////////////////////////////////////////////////////////////  # 
#                                                                                                       # 
#                                                                                                       # 
#  Settings:                                                                                            # 
#   ▪ ChestColor = The color of the chestplate.                                                         # 
#   ▪ LeggingsColor = The color of the chestplate.                                                      # 
#   ▪ BootsColor = The color of the chestplate.                                                         # 
#   ▪ Tool = The tool the minion is holding.                                                            # 
#   ▪ Head = The head the minion is wearing.                                                            # 
#   ▪ ActionTime = Time shown in seconds before each action is triggered between the minion.            # 
#   ▪ SlotsNumber = Number of slots available on the Minion, Max SlotsNumber = 15                       # 
#                                                                                                       # 
#   HolographicMessages:                                                                                # 
#   ▪ The messages displayed with Holograms.                                                            # 
#                                                                                                       # 
# ///////////////////////////////////////////////////////////////////////////////////////////////////// # 
#                                                                                                       # 
#   ▪ %LEVEL% = This will display the current level of the minion.                                      # 
#   ▪ %ROMAN_LEVEL% = This will display the current level of the subject in Roman numerals.             # 
#   ▪ %TIME% = This will display the current ActionTime of the minion.                                  # 
#                                                                                                       # 
# ///////////////////////////////////////////////////////////////////////////////////////////////////// # 
#                                                                                                       # 
#                                       [ Clothes Color List ]                                          # 
#                                                                                                       # 
#         -----> WHITE, BLACK, RED, GREEN, GRAY, CYAN, PINK, PURPLE, BROWN, YELLOW, BLUE <-----         # 
# ///////////////////////////////////////////////////////////////////////////////////////////////////// # 

Material: IRON_ORE
Type: MINER
DisplayItem:
  Glow: false
  DisplayName: '&eIRON_ORE MINER MINION %LEVEL%'
  Lore:
  - ''
  - '&6Description1'
  - '&6Description2 %LEVEL%'
  - '&6Description3 %TIME%'
Levels:
  Level_1:
    ChestColor: WHITE
    LeggingsColor: WHITE
    BootsColor: WHITE
    Tool: WOODEN_PICKAXE
    Head: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTczMDkyY2FlYTg5ZGQxMmQzNjgzNzVmMWEwOTc3OTZlM2JjODhmODA5YWNjZjMyMDcwNmJkYzA0OGNkNGM1ZSJ9fX0=
    ActionTime: 60
    SlotsNumber: 5
    Upgrade:
      Money:
        Available: false
        Amount: 0
      Items:
        Available: true
        CraftingId: '#'
        ItemList:
        - COBBLESTONE:32
        - IRON_ORE:32
        - minion#MINER#IRON_ORE#1
  Level_2:
    ChestColor: WHITE
    LeggingsColor: WHITE
    BootsColor: WHITE
    Tool: WOODEN_PICKAXE
    Head: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTczMDkyY2FlYTg5ZGQxMmQzNjgzNzVmMWEwOTc3OTZlM2JjODhmODA5YWNjZjMyMDcwNmJkYzA0OGNkNGM1ZSJ9fX0=
    ActionTime: 50
    SlotsNumber: 10
    Upgrade:
      Money:
        Available: false
        Amount: 0
      Items:
        Available: true
        CraftingId: '#'
        ItemList:
        - COBBLESTONE:32
        - IRON_ORE:32
        - minion#MINER#IRON_ORE#1
  Level_3:
    ChestColor: WHITE
    LeggingsColor: WHITE
    BootsColor: WHITE
    Tool: WOODEN_PICKAXE
    Head: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTczMDkyY2FlYTg5ZGQxMmQzNjgzNzVmMWEwOTc3OTZlM2JjODhmODA5YWNjZjMyMDcwNmJkYzA0OGNkNGM1ZSJ9fX0=
    ActionTime: 3
    SlotsNumber: 15
    Upgrade:
      Money:
        Available: false
        Amount: 0
      Items:
        Available: true
        CraftingId: '#'
        ItemList:
        - COBBLESTONE:32
        - IRON_ORE:32
        - minion#MINER#IRON_ORE#1
HolographicMessages:
- '&6Hologram1'
- '&aHologram2'
- '&bHologram3'
- '&eHologram4'
SmeltedMaterial: ''
```

{% endcode %}

* Copy a config file already created paste it and rename it to the material you want to make the new minion from.
* Change the Material and Type of the minion.
* Edit the DisplayItem to your liking, this item will be the one you will use as spawner to place your minion.
* Edit the levels to your liking, you can add more levels by copying the previous one and changing the level to a higher number.
* You can add as many holograms as you need, the minion will display them randomly.
* Put the material inside the SmeltedMaterial variable, so that the minion collects the material when it has a Smelter Upgrade on.


# Commands and Permissions

{% hint style="info" %}
You can create a unlimited types of minions.
{% endhint %}

The main command for TopMinion is **/topminion,** it have **giveminion**, **items** and **reload** as subcommands, players with **OP** or **topminion.admin** can use them.

### */topminion giveminion* usage

<table><thead><tr><th width="150">Parameter</th><th width="90">Data type</th><th>Description</th></tr></thead><tbody><tr><td>Type</td><td>Text (String)</td><td>You have <strong>5 types</strong>, each with their own job: Farmer, Fisher, Lumberjack, Miner and Slayer.</td></tr><tr><td>Material/Mob</td><td>Text (String)</td><td>Each type has its own material or mob that must be farmed, you can create your own minion, for example by making one that mines obsidian.</td></tr><tr><td>Level</td><td>Number (Integer)</td><td>The minions can have a fully configurable level, you can add or remove levels according to your preference.</td></tr><tr><td>Player <strong>(Optional)</strong></td><td>Text (String)</td><td>Name of the player you want to give the minion</td></tr></tbody></table>

### */topminion items* usage

The syntax is /topminion items \<item> give/set and the parameters are being explained here:&#x20;

[🧰](https://emojiterra.com/es/emojis/cofre-es/) | Chest Item Type

&#x20;/topminion items chest set \<tier> \[\<CustomModelData>]

<table><thead><tr><th width="147">Parameter</th><th width="90">Data type</th><th>Description</th></tr></thead><tbody><tr><td>Tier</td><td>Number (Integer)</td><td>Each type of chest has its tier level so that it can be used on the minion. <mark style="color:red;">(Only from 1 to 4)</mark></td></tr><tr><td>Custom Model Data <strong>(Optional)</strong></td><td>Number (Integer)</td><td>You can establish a custom model data to be able to make custom chest.</td></tr></tbody></table>

&#x20;/topminion items chest give \<tier> \[\<player>]

<table><thead><tr><th width="147">Parameter</th><th width="90">Data type</th><th>Description</th></tr></thead><tbody><tr><td>Tier</td><td>Number (Integer)</td><td>Each type of chest has its tier level so that it can be used on the minion. <mark style="color:red;">(Only from 1 to 4)</mark></td></tr><tr><td>Player <strong>(Optional)</strong></td><td>Text (String)</td><td>Name of the player you want to give the chest</td></tr></tbody></table>

[⛽](https://emojipedia.org/fuel-pump) |  Fuel Item Type

&#x20;/topminion items fuel set \<tier> \<percentage> \<fuelActions> \[\<CustomModelData>]&#x20;

<table><thead><tr><th width="148">Parameter</th><th width="90">Data Type</th><th>Description</th></tr></thead><tbody><tr><td>Tier</td><td>Number (Integer)</td><td>Each type of fuel has its tier level so that it can be used on the minion. (Unlimited tier levels)</td></tr><tr><td>Percentage</td><td>Number (Integer)</td><td>It is the percentage of time that will reduce fuel consumption.</td></tr><tr><td>Fuel Actions</td><td>Number (Integer)</td><td>It is the number of actions the minion will do before running out of fuel.</td></tr><tr><td>Custom Model Data <strong>(Optional)</strong></td><td>Number (Integer)</td><td>You can establish a custom model data to be able to make custom fuel.</td></tr></tbody></table>

&#x20;/topminion items fuel give \<fuelName> \[\<player>]

<table><thead><tr><th width="148">Parameter</th><th width="90">Data type</th><th>Description</th></tr></thead><tbody><tr><td>Fuel Name</td><td>Text (String)</td><td>This is done by fuel + the tier for example if you created a fuel with the tier 2 the fuel name would be: fuel2</td></tr><tr><td>Player <strong>(Optional)</strong></td><td>Text (String)</td><td>Name of the player you want to give the fuel</td></tr></tbody></table>

🔥 | Smelter Item Type

&#x20;/topminion items smelter set \<smelterActions> \[\<CustomModelData>]

<table><thead><tr><th width="151">Parameter</th><th width="90">Data type</th><th>Description</th></tr></thead><tbody><tr><td>Smelter Actions</td><td>Number (Integer)</td><td>It is the number of actions the minion will do before running out of autosell.</td></tr><tr><td>Custom Model Data <strong>(Optional)</strong></td><td>Number (Integer)</td><td>You can establish a custom model data to be able to make custom smelter.</td></tr></tbody></table>

&#x20;/topminion items smelter give \[\<player>]

<table><thead><tr><th width="148">Parameter</th><th width="90">Data type</th><th>Description</th></tr></thead><tbody><tr><td><p>Player</p><p><strong>(Optional)</strong></p></td><td>Text (String)</td><td>Name of the player you want to give the smelter</td></tr></tbody></table>

💰 | Autosell Item Type

&#x20;/topminion items autosell set \<autosellActions> \[\<CustomModelData>]

<table><thead><tr><th width="148">Parameter</th><th width="90">Data type</th><th>Description</th></tr></thead><tbody><tr><td>Autosell Actions</td><td>Number (Integer)</td><td>It is the number of actions the minion will do before running out of autosell.</td></tr><tr><td>Custom Model Data <strong>(Optional)</strong></td><td>Number (Integer)</td><td>You can establish a custom model data to be able to make custom smelter.</td></tr></tbody></table>

&#x20;/topminion items autosell give \[\<player>]

<table><thead><tr><th width="148">Parameter</th><th width="90">Data type</th><th>Description</th></tr></thead><tbody><tr><td><p>Player</p><p><strong>(Optional)</strong></p></td><td>Text (String)</td><td>Name of the player you want to give the autosell</td></tr></tbody></table>

### */topminion reload* usage

It has no parameters so using it will reload all the configuration files


# Upgrades

You can create custom upgrades for your minions to make your server more personalized and attractive.

| 🆙Level Upgrade Options    | Expected Value                                                                                                                                                                   |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Chest/Leggings/Boots Color | WHITE, BLACK, RED, GREEN, GRAY, CYAN, PINK, PURPLE, BROWN, YELLOW, BLUE                                                                                                          |
| Tool                       | [Material](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html)                                                                                                    |
| Head                       | [Head Value](https://minecraft-heads.com/custom-heads)                                                                                                                           |
| ActionTime                 | Number                                                                                                                                                                           |
| SlotsNumber                | Number                                                                                                                                                                           |
| Upgrade.Money.Available    | Boolean (Requires [Vault](https://www.spigotmc.org/resources/vault.34315/))                                                                                                      |
| Upgrade.Money.Amount       | Number (Requires [Vault](https://www.spigotmc.org/resources/vault.34315/))                                                                                                       |
| Upgrade.Items.Available    | Boolean                                                                                                                                                                          |
| Upgrade.Items.ItemList     | String List, you can use EcoItems **ecoitems#id\_material#amount**, or other minions **minion#minion\_type#minion\_material#level** or simply vanilla items, **material#amount** |

{% hint style="info" %}
In the configuration section **Upgrade** It is the cost needed to reach **that same level**, that is, you are configuring what is needed for **that level.**
{% endhint %}

{% hint style="info" %}
If you will use a minion to upgrade another minion keep in mind that the player will need two of the same level, one in hand and the other that is placed.
{% endhint %}

How to add custom upgrade:

```yaml
Level_3:
    ChestColor: WHITE
    LeggingsColor: WHITE
    BootsColor: WHITE
    Tool: WOODEN_PICKAXE
    Head: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTczMDkyY2FlYTg5ZGQxMmQzNjgzNzVmMWEwOTc3OTZlM2JjODhmODA5YWNjZjMyMDcwNmJkYzA0OGNkNGM1ZSJ9fX0=
    ActionTime: 3
    SlotsNumber: 15
    Upgrade:
      Money:
        Available: false
        Amount: 0
      Items:
        Available: true
        CraftingId: '#'
        ItemList:
        - COBBLESTONE:32
        - IRON_ORE:32
        - minion#MINER#IRON_ORE#1
```


# Dependencies

✅The plugin **has no dependencies**, but it does have soft dependencies that you can use to have some improvements or features.

<table><thead><tr><th width="261">SoftDepend</th><th>Usage</th></tr></thead><tbody><tr><td><a href="https://www.spigotmc.org/resources/30-sale-%E2%8F%B3-ecoitems-%E2%AD%95-create-custom-items-%E2%9C%85-weapons-armors-tools-charms-%E2%9C%A8-item-levels-cosmetics.94601/">EcoItems</a></td><td>Allows you to handle minion upgrades.</td></tr><tr><td><a href="https://polymart.org/resource/eco.773">Eco</a></td><td>Allows you to handle minion upgrades.</td></tr><tr><td><a href="https://www.spigotmc.org/resources/bentobox-bskyblock-acidisland-skygrid-caveblock-aoneblock-boxed.73261/">BentoBox</a></td><td>Prevents problems with placing minions on islands.</td></tr><tr><td><a href="https://www.spigotmc.org/resources/%E2%9A%A1%EF%B8%8F-superiorskyblock2-%E2%9A%A1%EF%B8%8F-the-best-core-on-market-%E2%9A%A1%EF%B8%8F-1-20-2-support.87411/">SuperiorSkyblock2</a></td><td>Prevents problems with placing minions on islands and allows you to create shematics with minions already in place.</td></tr><tr><td><a href="https://dev.bukkit.org/projects/multiverse-core">Multiverse-Core</a></td><td>Allows you to place minions on worlds without them breaking.</td></tr><tr><td><a href="https://www.spigotmc.org/resources/placeholderapi.6245/">PlaceholderAPI</a></td><td>Allows you to use placeholders in texts.</td></tr><tr><td><a href="https://dev.bukkit.org/projects/holographic-displays">HolographicDisplays</a></td><td>Allows you to use holograms on the minions.</td></tr><tr><td><a href="https://www.spigotmc.org/resources/decentholograms-1-8-1-20-4-papi-support-no-dependencies.96927/">DecentHolograms</a></td><td>Allows you to use holograms on the minions.</td></tr></tbody></table>


# Developer API

For developers, here you will have a mini basic guide to some of the uses you have, it assumes some knowledge about java and plugins in general. Any doubt you can contact me in the discord

### Implementation

First of all, to get as dependency, you will need in the root folder a folder called libs and the .jar should be there

In your gradle project

```gradle
compileOnly files("libs/TopMinion.jar")
```

In your maven project

```xml
<dependencies>
    <dependency>
        <groupId>com.sarry20</groupId>
        <artifactId>TopMinion</artifactId>
        <version>VERSION</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/libs/TopMinion.jar</systemPath>
    </dependency>
</dependencies>
```

### Events

You will now have access to our classes and you can start modifying things, first, let's go to the easiest thing of all, the events, you can listen to all these events:&#x20;

* MinionPlaceEvent
* MinionBreakEvent
* MinionUpgradeEvent
* MinionAddMemberEvent
* MinionTakeInventoryItemsEvent
* ChestPlaceEvent
* ChestBreakEvent
* ChestTakeItemsEvent

### ItemProvider

Another thing you can do is to set up your own item provider to do the upgrades, this is the interface you must implement for it

```java
package com.sarry20.topminion.hook.interfaces;

import org.bukkit.inventory.ItemStack;

public interface ItemProvider {
    ItemStack getItem(String itemID, int amount);

    boolean checkItem(ItemStack item);

    String getMetadata(ItemStack item);
}
```

Once you have your class, what you will have to do is to put it as the item provider for it you can do it with the following line:

```java
TopMinion.getInstance().getHookManager().setItemProvider(new YourCustomProvider());
```

Now you will be able to use the item plugin that you have implemented, for this in the configuration of the items you must put: identifier#item\_id#quantity

<table><thead><tr><th width="137">String</th><th>explanation</th></tr></thead><tbody><tr><td>identifier</td><td>it is not used for anything in the plugin, it is simply for you as a configurator to know which plugin it comes from or whatever you want to put.</td></tr><tr><td>item_id</td><td>this is the name by which the ItemProvider#getItem method will get the item you need for the enhancement.</td></tr><tr><td>amount</td><td> the amount needed to level up the minion.</td></tr></tbody></table>

## Upgrades

Also, you can create your own upgrades for the minions, for this you will need to create 2 classes, one that implements Upgrade and another that implements DataHolder. Let's see this in a little more detail

### Upgrade

This is the Upgrade class that you must implement to create a new upgrade

```java
package com.sarry20.topminion.upgrades;

import com.sarry20.topminion.models.minion.MinionObj;
import com.sarry20.topminion.upgrades.dataHandler.Datahandler;
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.inventory.ItemStack;

public interface Upgrade extends ConfigurationSerializable {

    /**
     * @return the item that represent the upgrade
     * */
    ItemStack getItem();

    /**
     * @param objects the objects that should be used to get the data handler, can be null
     *                these can be integers, strings, etc
     *                used to create a data handler with the specific data, not with the default data
     * @return the data handler of the upgrade
     * */
    Datahandler getDataHandler(Object... objects);

    /**
     * Called when tries to add the upgrade to the minion
     * @param minionObj the minion that the upgrade is being added
     * @return true if the upgrade should be added
     * */
    boolean onAdd(MinionObj minionObj);

    /**
     * Called every time the minion work
     * @param minionObj the minion that is working
     * @return (only used when upgrade is a fuel) the time to the next tick
     * */
    int onTick(MinionObj minionObj);

    /**
     * Called when the player give the item to the minion
     * @param item the item that the minion is going to add to the inventory
     *             this item can be modified
     * @param minionObj the minion that is going to receive the item
     * @return the item that should be given to the minion
     * */
    ItemStack onGiveItemToMinion(MinionObj minionObj, ItemStack item);

    /**
     * Called when the player click on the item
     * @param shiftClick true if the player is shift clicking
     * @param minionObj the minion that the upgrade is being clicked
     * @return true if the upgrade should be removed
     * */
    boolean onClick(boolean shiftClick, MinionObj minionObj);

    /**
     * @return true if should be on fuel slot
     * */
    boolean isFuel();

    /**
     * @return the remaining uses of the upgrade
     * */
    int getRemainingUses();
}
```

NOTE about getDataHolder: for the upgrades that are done I am using the parameter, for when the upgrade with LIMITED uses is removed, to store the remaining uses in the item

### DataHolder

This is the DataHolder class that you must implement for the minion to store the necessary information, it is quite basic, if you need more methods for your implementation do not hesitate to enter discord to suggest what methods you need.

```java
package com.sarry20.topminion.upgrades.dataHandler;

import org.bukkit.configuration.serialization.ConfigurationSerializable;

public interface Datahandler extends ConfigurationSerializable {

    /**
     * @return the remaining uses of the upgrade
     * */
    int getRemainingUses();

    /**
     * remove much actions as you want
     * @param actions the actions to remove
     * */
    void takeActions(int actions);
}
```

Once you have the classes created, when you want to add the upgrade, you must add the following line

```java
TopMinion.getInstance().getUpgradeManager().addUpgrade(key, upgrade)
```

Also for it to work you must register your two classes in the serializer

```java
ConfigurationSerialization.registerClass(YourCustomUpgrade.class);
```

```java
ConfigurationSerialization.registerClass(YourCustomDataHolder.class);
```

These are the functions that we have contemplated to do, any other function is not tested and you will do it under your responsibility (these functions here explained, also will be done under your responsibility, but these are explained), you can always ask for help in discord or ask to add a function to the api

## Examples

### ItemProvider Implementation

```java
package com.sarry20.topminion.hook.items;

import com.sarry20.topminion.hook.interfaces.ItemProvider;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.inventory.ItemStack;
import org.bukkit.persistence.PersistentDataType;

public class EcoItems implements ItemProvider {

    public EcoItems(){
        //No need to init anything
    }
    @Override
    public ItemStack getItem(String itemID, int amount) {
        try{
            ItemStack item = com.willfp.ecoitems.items.EcoItems.INSTANCE.getByID(itemID).getItemStack();
            if (item.hasItemMeta()) {
                item.setAmount(amount);
                return item;
            }
        }catch (Exception e){
            Bukkit.getLogger().severe("Invalid item ID: " + itemID);
        }
        return null;
    }
    @Override
    public boolean checkItem(ItemStack item){
        if(item == null || item.getItemMeta() == null)
            return false;
        return item.getItemMeta()
                .getPersistentDataContainer()
                .has(new NamespacedKey(Bukkit.getServer().getPluginManager().getPlugin("EcoItems"), "item"), PersistentDataType.STRING);
    }
    @Override
    public String getMetadata(ItemStack item) {
        return item.getItemMeta()
                .getPersistentDataContainer()
                .get(
                        new NamespacedKey(Bukkit.getServer().getPluginManager().getPlugin("EcoItems"), "item"),
                        PersistentDataType.STRING);
    }
}
```

### Upgrade Implementation

FuelUpgrade.class

```java
package com.sarry20.topminion.upgrades;

import com.sarry20.topminion.TopMinion;
import com.sarry20.topminion.models.minion.MinionObj;
import com.sarry20.topminion.upgrades.dataHandler.Datahandler;
import com.sarry20.topminion.upgrades.dataHandler.FuelData;
import org.bukkit.configuration.serialization.SerializableAs;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;

import java.util.*;

@SerializableAs("fuel")
public class FuelUpgrade implements Upgrade {

    private final String key;
    private final int tier;
    private final ItemStack item;
    private final int percent;
    private final int fuelActions;
    private final String CustomModelData;

    public FuelUpgrade(String key,int tier, ItemStack item, int percent, int fuelActions, String CustomModelData) {
        this.key = key;
        this.tier = tier;
        this.item = item;
        this.percent = percent;
        this.fuelActions = fuelActions;
        this.CustomModelData = CustomModelData;

    }

    public FuelUpgrade(Map<String, Object> map) {
        key = (String) map.get("key");
        tier = (int) map.get("tier");
        item = (ItemStack) map.get("item");
        percent = (int) map.get("percent");
        fuelActions = (int) map.get("fuelActions");
        CustomModelData = (String) map.get("CustomModelData");
    }

    @Override
    public ItemStack getItem() {
        ItemStack is = item.clone();
        ItemMeta meta = is.getItemMeta();
        List<String> newLore = new ArrayList<>();
        for (String string : meta.getLore()) {
            newLore.add(string.replaceAll("%remaining_actions%",fuelActions+""));
        }
        meta.setLore(newLore);
        is.setItemMeta(meta);
        is.setAmount(1);
        return is;
    }

    @Override
    public Datahandler getDataHandler(Object... objects) {
        if (objects.length != 0 && objects[0] instanceof Integer){
            return new FuelData((int) objects[0]);
        }
        return new FuelData(fuelActions);

    }
    
    @Override
    public boolean onAdd(MinionObj minionObj) {
        for (String upgrade : minionObj.getUpgrades().keySet()) {
            Upgrade upgradeObj = TopMinion.getInstance().getUpgradeManager().getUpgrade(upgrade);
            if (upgradeObj.isFuel()){
                return false;
            }
        }
        return true;
    }

    @Override
    public int onTick(MinionObj minionObj) {
        int fuelTime = minionObj.getTime() - (minionObj.getTime() * percent / 100);
        Datahandler data = minionObj.getUpgrades().get(key);
        if (data.getRemainingUses() != -1){
            data.takeActions(1);
            if (data.getRemainingUses() == 0){
                minionObj.getUpgrades().remove(key);
            }
        }
        return fuelTime;


    }

    @Override
    public ItemStack onGiveItemToMinion(MinionObj minionObj, ItemStack item) {
        return item;
    }

    @Override
    public boolean onClick(boolean shiftClick, MinionObj minionObj) {
        return true;
    }

    @Override
    public boolean isFuel() {
        return true;
    }

    @Override
    public int getRemainingUses() {
        return fuelActions;
    }

    @NotNull
    @Override
    public Map<String, Object> serialize() {
        Map<String, Object> map = new HashMap<>();
        map.put("key", key);
        map.put("tier", tier);
        map.put("item", item);
        map.put("percent", percent);
        map.put("fuelActions", fuelActions);
        map.put("CustomModelData", CustomModelData);

        return map;
    }
}
```

SmelterUpgrade.class

```java
package com.sarry20.topminion.upgrades;

import com.sarry20.topminion.models.minion.MinionObj;
import com.sarry20.topminion.models.minionConfig.ConfigClass;
import com.sarry20.topminion.models.minionConfig.ConfigClassManager;
import com.sarry20.topminion.upgrades.dataHandler.Datahandler;
import com.sarry20.topminion.upgrades.dataHandler.SmelterData;
import org.bukkit.Material;
import org.bukkit.configuration.serialization.SerializableAs;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;

import java.util.HashMap;
import java.util.Map;

@SerializableAs("smelter")
public class SmelterUpgrade implements Upgrade {

    private final String key;
    private final ItemStack item;
    private final int smelterActions;
    private final String customModelData;

    public SmelterUpgrade(String key, ItemStack item,int smelterActions, String customModelData) {
        this.key = key;
        this.item = item;
        this.smelterActions = smelterActions;
        this.customModelData = customModelData;
    }

    public SmelterUpgrade(Map<String, Object> map) {
        key = (String) map.get("key");
        item = (ItemStack) map.get("item");
        smelterActions = (int) map.get("smelterActions");
        customModelData = (String) map.get("customModelData");
    }

    @NotNull
    @Override
    public Map<String, Object> serialize() {
        Map<String, Object> map = new HashMap<>();
        map.put("key", key);
        map.put("item", item);
        map.put("smelterActions", smelterActions);
        map.put("customModelData", customModelData);

        return map;
    }

    @Override
    public ItemStack getItem() {
        return item;
    }

    @Override
    public Datahandler getDataHandler(Object... objects) {
        if (objects.length != 0 && objects[0] instanceof Integer){
            return new SmelterData((int) objects[0]);
        }
        return new SmelterData(smelterActions);
    }

    @Override
    public boolean onAdd(MinionObj minionObj) {
        return true;
    }

    @Override
    public int onTick(MinionObj minionObj) {
        return 0;
    }

    @Override
    public ItemStack onGiveItemToMinion(MinionObj minionObj, ItemStack itemStack) {
        Datahandler data = minionObj.getUpgrades().get(key);
        if (data.getRemainingUses() != -1){
            data.takeActions(1);
            if (data.getRemainingUses() == 0) {
                minionObj.getUpgrades().remove(key);
            }
        }
        ConfigClass configClass = ConfigClassManager.getConfigClass(minionObj.getMaterial(), minionObj.getType());
        if (configClass != null && !configClass.getSmeltedMaterial().isEmpty()) {
            Material smelterMaterial = Material.getMaterial(configClass.getSmeltedMaterial());
            itemStack.setType(smelterMaterial);
        }
        return itemStack;
    }

    @Override
    public boolean onClick(boolean shiftClick, MinionObj minionObj) {

        return true;
    }

    @Override
    public boolean isFuel() {
        return false;
    }

    @Override
    public int getRemainingUses() {
        return smelterActions;
    }
}
```

### DataHolder Implementation

FuelData.class

```java
package com.sarry20.topminion.upgrades.dataHandler;

import org.bukkit.configuration.serialization.SerializableAs;
import org.jetbrains.annotations.NotNull;

import java.util.Map;

@SerializableAs("fuelData")
public class FuelData implements Datahandler {
    private int fuelActions;

    public FuelData(int fuelActions) {
        this.fuelActions = fuelActions;
    }
    public FuelData(Map<String, Object> map) {
        fuelActions = (int) map.get("fuelActions");
    }

    @NotNull
    @Override
    public Map<String, Object> serialize() {
        return Map.of("fuelActions", fuelActions);
    }

    @Override
    public int getRemainingUses() {
        return fuelActions;
    }

    @Override
    public void takeActions(int actions) {
        fuelActions -= actions;
    }
}
```

SmelterData.class

```java
package com.sarry20.topminion.upgrades.dataHandler;

import org.bukkit.configuration.serialization.SerializableAs;
import org.jetbrains.annotations.NotNull;

import java.util.Map;

@SerializableAs("smelterData")
public class SmelterData implements Datahandler {
    private int fuelActions;

    public SmelterData(int fuelActions) {
        this.fuelActions = fuelActions;
    }
    public SmelterData(Map<String, Object> map) {
        fuelActions = (int) map.get("fuelActions");
    }

    @Override
    public int getRemainingUses() {
        return fuelActions;
    }

    @Override
    public void takeActions(int actions) {
        fuelActions -= actions;
    }

    @NotNull
    @Override
    public Map<String, Object> serialize() {
        return Map.of("fuelActions", fuelActions);


    }
}
```


# Collections

<figure><img src="https://1586766809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoyJVkonvFSGJ9CJuynNI%2Fuploads%2FkzdewZiUBzaQVzki89gN%2Fb3670b076d94c3ef80637e9be2e65282617d1650.png?alt=media&amp;token=80e8a2e6-a5b5-405c-9b54-c0adaf8a4358" alt=""><figcaption></figcaption></figure>

**Collections** is a plugin that allows us to perform different activities such as **mining, logging, fishing, hunting, collecting** to level up and get incredible **rewards**.

You will also be able to include **personalized items** to the **rewards**.

This plugin offers more content for players and it is kept up2date and via our support discord you easily can get help, or just shoot your question.

We have a **TEST SERVER** 1.20.1 for you to test our products IP: test.sarry20.com

We will also keep an eye on the feedback you give us to continue implementing new features to Collections.

<figure><img src="https://1586766809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoyJVkonvFSGJ9CJuynNI%2Fuploads%2Fu95XvmeUv0Wbabhof4Ke%2F6bb03808e975285a4f27323bfce975f2b3a2414a.png?alt=media&amp;token=65075c01-62cc-40e2-b1b6-7aca2b643da4" alt=""><figcaption></figcaption></figure>

Join our help discord: <https://discord.gg/GGdxNGQRqN>\
or you can also contact both VictorRosillo and sarry20 through their Discord: victorrosillo / sarry20


# Installation

1. Download the [TopCollections plugin](https://www.spigotmc.org/resources/topcollections-%E2%9C%85-the-best-collections-plugin-%E2%AD%95-very-optimized-%E2%9A%99%EF%B8%8F-fully-customizable-1-18-1-20-4.112400/).
2. Add C[^1]ollections to your plugins folder.&#x20;
3. Enjoy your new level up collection plugin!

[^1]:


# Configuration

### How to create a custom Collecion

{% hint style="success" %}
You can create an unlimited number of levels
{% endhint %}

First you need this base, we are creating a OBSIDIAN.yml to use as example

```yaml
Material: OBSIDIAN
Type: MINING
DisplayItem:
  DisplayName: '&5OBSIDIAN &8| &7Mining Collection &f(Level %level%)'
  Lore:
  - ''
  - '&7Mine &5OBSIDIAN &7blocks to show your love for the nether'
  - '&8• &6⛏ Mined: &e%collectionCount%'
  - '&8• &a🆙 Next Level: %percentBar%'
UndiscoveredItem:
  DisplayName: '&5⛏ OBSIDIAN &8| &cMining Collection'
  Lore:
  - ''
  - '&7Search &5OBSIDIAN &7blocks to start your adventure'
Levels:
#some levels here
```

Then with this base you can add your custom levels

```yaml
  Level_1:
    Actions: 60
    LevelUpExecuteCommands:
    - say %player% just leveled up
    LevelPanelItem:
      DisplayName: '&eCollection Level 1'
      Lore:
      - ''
      - '&7Mine &5OBSIDIAN &7blocks to show your love for the nether'
      - '&8• &6⛏ Mined: &e%collectionCount%'
      - '&8• &a🆙 Next Level: %percentBar%'
      - '&b&lREWARDS:'
      - '&e➤ &21 Emerald'
    Rewards:
      Commands:
      - minecraft:give %player% emerald 1
      Messages:
      - '&21 Emerald'

```

The final version should look like this, in this example we are giving emeralds for each collection level

```yaml
Material: OBSIDIAN
Type: MINING
DisplayItem:
  DisplayName: '&5OBSIDIAN &8| &7Mining Collection &f(Level %level%)'
  Lore:
  - ''
  - '&7Mine &5OBSIDIAN &7blocks to show your love for the nether'
  - '&8• &6⛏ Mined: &e%collectionCount%'
  - '&8• &a🆙 Next Level: %percentBar%'
UndiscoveredItem:
  DisplayName: '&5⛏ OBSIDIAN &8| &cMining Collection'
  Lore:
  - ''
  - '&7Search &5OBSIDIAN &7blocks to start your adventure'
Levels:
  Level_1:
    Actions: 60
    LevelUpExecuteCommands:
    - say %player% just leveled up
    LevelPanelItem:
      DisplayName: '&eCollection Level 1'
      Lore:
      - ''
      - '&7Mine &5OBSIDIAN &7blocks to show your love for the nether'
      - '&8• &6⛏ Mined: &e%collectionCount%'
      - '&8• &a🆙 Next Level: %percentBar%'
      - '&b&lREWARDS:'
      - '&e➤ &21 Emerald'
    Rewards:
      Commands:
      - minecraft:give %player% emerald 1
      Messages:
      - '&21 Emerald'
  Level_2:
    Actions: 80
    LevelUpExecuteCommands:
    - say %player% just leveled up
    LevelPanelItem:
      DisplayName: '&eCollection Level 2'
      Lore:
      - ''
      - '&7Mine &5OBSIDIAN &7blocks to show your love for the nether'
      - '&8• &6⛏ Mined: &e%collectionCount%'
      - '&8• &a🆙 Next Level: %percentBar%'
      - '&b&lREWARDS:'
      - '&e➤ &22 Emerald'
    Rewards:
      Commands:
      - minecraft:give %player% emerald 2
      Messages:
      - '&22 Emerald'
  Level_3:
    Actions: 100
    LevelUpExecuteCommands:
    - say %player% just leveled up
    LevelPanelItem:
      DisplayName: '&eCollection Level 3'
      Lore:
      - ''
      - '&7Mine &5OBSIDIAN &7blocks to show your love for the nether'
      - '&8• &6⛏ Mined: &e%collectionCount%'
      - '&8• &a🆙 Next Level: %percentBar%'
      - '&b&lREWARDS:'
      - '&e➤ &23 Emerald'
    Rewards:
      Commands:
      - minecraft:give %player% emerald 3
      Messages:
      - '&23 Emerald'
```


# Commands and Permissions

All commands except /col require **OP** or **topcollections .\*** permission

| 🤖 Command                    | Usage                                                                     |
| ----------------------------- | ------------------------------------------------------------------------- |
| /col                          | Open the collections menu                                                 |
| /topcollections reload        | Reloads the config                                                        |
| /topcollections updateplayers | Allows you to update the menus and see the new collections you have added |
| /topcollections upload        | Uploads the playerdata to the database                                    |


# Dependencies

Dependecies: none


# CombatLog


# Installation

* Download the TopCombatLog plugin.
* Add CombatLog to your plugins folder.&#x20;
* Enjoy your combat log plugin!


# Configuration

### Information about config

This is the default config, you can modify the parameters as you want

| Parameter       | Description                                                              |
| --------------- | ------------------------------------------------------------------------ |
| ParticleEffect  | Shows a particle effect when two players are hitting                     |
| KeepInventory   |                                                                          |
| ShowTimeMessage |                                                                          |
| PvpPlayerChoice | Allows the player to change their pvp status or not with **/pvp toggle** |
| CombatTime      | The amount of time the combatlog will last                               |

```yaml
config:
  ==: com.sarry20.topcombatlog.models.config.mainconfig.MainConfigObj
  ParticleEffect: true
  KeepInventory: false
  ShowTimeMessage: true
  PvpPlayerChoice: true
  CombatTime: 30

```


# Commands and Permissions

There are two commands, **/pvp toggle** to toggle whether you want pvp or not and /topcombatlog with these parameters:

<table><thead><tr><th>🤺 Parameter</th><th>Description</th><th data-hidden></th></tr></thead><tbody><tr><td>reload</td><td>Reloads the plugin config</td><td></td></tr><tr><td>upload</td><td>Upload the player data</td><td></td></tr><tr><td>clearcombatlist</td><td>Removes all players from combatlog</td><td></td></tr></tbody></table>


# Dependencies

Dependecies: none


# BossSlayer

<figure><img src="https://1586766809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoyJVkonvFSGJ9CJuynNI%2Fuploads%2FjILlUiFFWnGuaj2PPJh2%2F745df76b91b34357b756466c9f3c72529e9df1ba.png?alt=media&amp;token=e4d39dec-0fc4-45fb-825d-717921ea9c1c" alt=""><figcaption></figcaption></figure>

**TOPBOSSSLAYER** is a plugin that allows us to implement a **boss hunt system** to level up and get incredible prizes.

It also puts at our disposal a system of bosses configuration so that there is a great variety of hunts.

This Plugin offers more content for players and it is kept up2date and via our support discord you easily can get help, or just shoot your question.

We have a TEST SERVER 1.20.1 for you to test our products Ip: test.sarry20.com

We will also keep an eye on the feedback you give us to continue implementing new features to TopBossSlayer.

<figure><img src="https://proxy.spigotmc.org/45b15bc434ba0b53eae3614628964167df1b5574?url=https%3A%2F%2Fcdn.discordapp.com%2Fattachments%2F1082401701622988820%2F1150235238912503838%2FBossSlayerSupport.png" alt=""><figcaption></figcaption></figure>

Join our help discord: <https://discord.gg/GGdxNGQRqN>\
or you can also contact both VictorRosillo and sarry20 through their Discord: victorrosillo / sarry20


# Installation

1. Download the TopBossSlayer plugin.
2. Add TopBossSlayer to your plugins folder.&#x20;
3. Enjoy your new slayer missions!

{% hint style="warning" %}
ALERT: In some updates it will be necessary to delete the config files for it to generate the new stuff. You will be notified with each update.&#x20;
{% endhint %}


# Cofiguration

## **Information about config.yml and language.yml**

#### The heads are obtained in this page: <https://minecraft-heads.com/custom-heads>

### **CREATE NEW BOSS**

{% code lineNumbers="true" %}

```yaml
 # DON'T MODIFY THAT
 - ==: com.sarry20.topbossslayer.models.configSlays.ConfigSlayGroups
 # This is the XP needed to get a reward.
      maxPlayerXpToReward: 1000
      # This is the mob type.
      mobType: ZOMBIE
      groupImage:
        ==: org.bukkit.inventory.ItemStack
        v: 3465
        # This is the item you want to appear in the menu (type).
        type: ROTTEN_FLESH
        meta:
          ==: ItemMeta
          meta-type: UNSPECIFIC
          ItemFlags:
          - HIDE_ATTRIBUTES
      slayGroupLevels:
      - ==: com.sarry20.topbossslayer.models.configSlays.ConfigSlayGroupLevels
        configBossPerLevel:
          ==: com.sarry20.topbossslayer.models.configSlays.ConfigBossPerLevel
          pants:
            ==: org.bukkit.inventory.ItemStack
            v: 3465
            # Here you can modify the armor or armament that the boss will have.
            type: IRON_LEGGINGS
          chestPlate:
            ==: org.bukkit.inventory.ItemStack
            v: 3465
            # Here you can modify the armor or armament that the boss will have.
            type: IRON_CHESTPLATE
          helmet:
            ==: org.bukkit.inventory.ItemStack
            v: 3465
            # Here you can modify the armor or armament that the boss will have.
            type: IRON_HELMET
          boots:
            ==: org.bukkit.inventory.ItemStack
            v: 3465
            # Here you can modify the armor or armament that the boss will have.
            type: IRON_BOOTS
          tool:
            ==: org.bukkit.inventory.ItemStack
            v: 3465
            # Here you can modify the armor or armament that the boss will have.
            type: IRON_SWORD
      # This is the boss level.
        level: 1
      # These are the mobs (zombie) needed for the boss to appear.
        mobsSlainToBossAppear: 100
      # This is the experience you get from killing a boss.
        bossXpReward: 5
```

{% endcode %}

### HOW TO USE MYTHIC MOBS DEPENDENCY

{% code lineNumbers="true" %}

```yaml
 # DON'T MODIFY THAT
 - ==: com.sarry20.topbossslayer.models.configSlays.ConfigSlayGroups
 # This is the XP needed to get a reward.
      maxPlayerXpToReward: 1000
      # This is the mob type.
      mobType: ZOMBIE
      groupImage:
        ==: org.bukkit.inventory.ItemStack
        v: 3465
        # This is the item you want to appear in the menu (type).
        type: ROTTEN_FLESH
        meta:
          ==: ItemMeta
          meta-type: UNSPECIFIC
          ItemFlags:
          - HIDE_ATTRIBUTES
      slayGroupLevels:
      - ==: com.sarry20.topbossslayer.models.configSlays.ConfigSlayGroupLevels
        configBossPerLevel:
          ==: com.sarry20.topbossslayer.models.configSlays.ConfigBossPerLevel
          pants:
            ==: org.bukkit.inventory.ItemStack
            v: 3465
            # Here you can modify the armor or armament that the boss will have.
            type: IRON_LEGGINGS
          chestPlate:
            ==: org.bukkit.inventory.ItemStack
            v: 3465
            # Here you can modify the armor or armament that the boss will have.
            type: IRON_CHESTPLATE
          helmet:
            ==: org.bukkit.inventory.ItemStack
            v: 3465
            # Here you can modify the armor or armament that the boss will have.
            type: IRON_HELMET
          boots:
            ==: org.bukkit.inventory.ItemStack
            v: 3465
            # Here you can modify the armor or armament that the boss will have.
            type: IRON_BOOTS
          tool:
            ==: org.bukkit.inventory.ItemStack
            v: 3465
            # Here you can modify the armor or armament that the boss will have.
            type: IRON_SWORD
      # This is the boss level.
        level: 1
      # These are the mobs (zombie) needed for the boss to appear.
        mobsSlainToBossAppear: 100
      # This is the experience you get from killing a boss.
        bossXpReward: 5
```

{% endcode %}

###

### HOW TO CONFIG REWARDS

{% code lineNumbers="true" %}

```yaml
  maxXpRewards:
  # Type of the mob.
    ZOMBIE:
    # If you want to modify the items that the mobs 
    # will MaxXpDrop do it from in-game with this command:
    # You need to put the item on hand!
    # /topbossslayer addMaxXpRewards <MobType>
      items: []
    # These are the commands you want to execute.
    # Example:
      executeCommands: 
      - msg %player% &6You complete the Zombie reward.
  bossRewards:
  # Type of the mob.
    ZOMBIE:
    # These are the mob levels that you have configured in the config.yml.
    # You can only have a maximum of 7 levels.
    # Drops will be given each time the user completes a level and kills the boss.
      '1':
      # If you want to modify the items that the mobs 
      # will drop do it from in-game with this command:
      # You need to put the item on hand!
      # /topbossslayer addBossRewards <MobType> <Level>
        items: []
      # These are the commands you want to execute.
      # Example:
        executeCommands: 
        - msg %player% &6You complete the Zombie reward.
```

{% endcode %}

### HOW TO CONFIG LANGUAJE

{% code lineNumbers="true" %}

```yaml
    # Mob type of config.
    ZOMBIE:
      groupImage:
      # Name shown on the menu.
        name: '&eGroup Name'
      # Description of the group on the menu.
        description:
        # ONLY 4 LINES.
        - '&7Enter'
        - '&7The'
        - '&7Group Description'
        - ''
        footer: '&eClick to View!'
      missionImage:
      # Name of the mission on the menu.
        name: '&aMission Name %level%'
      # Description of the mission on the menu.
        description:
        - '&7Enter'
        - '&7The'
        - '&7Mission Description'
        - ''
        footer: '&eClick to View!'
        slayDependency: '&cSlay Name Mission %level% first'
      boss:
      # Boss name per level.
        '1': '&8Boss Name'
        '2': '&8Boss Name'
        '3': '&8Boss Name'
        '4': '&8Boss Name'
        '5': '&8Boss Name'
        '6': '&8Boss Name'
        '7': '&8Boss Name'
```

{% endcode %}


# Commands and Permissions

{% hint style="info" %}
Commands with \* are exclusive for OP users.
{% endhint %}

{% code fullWidth="true" %}

```yaml
Commands:

/batphone
  (Permission: topbossslayer.*)

  
OP Commands:
/topbossslayer reloadPlayerConfigs
(Permission: topbossslayer.*)
/topbossslayer save
(Permission: topbossslayer.*)
/topbossslayer load
(Permission: topbossslayer.*)
/topbossslayer batphone get
(Permission: topbossslayer.*)
/topbossslayer addMaxXpRewards <MobType> <Item on Hand / Command with spaces -> # >
(Permission: topbossslayer.*)
/topbossslayer addBossRewards <MobType> <Level> <Item on Hand / Command with spaces -> # >
(Permission: topbossslayer.*)
```

{% endcode %}


# Dependencies

Dependecies: none

Softdepends: none


# VBank

<figure><img src="https://1586766809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoyJVkonvFSGJ9CJuynNI%2Fuploads%2FzlWVHWDVgBvS9dkButmG%2FVBank.png?alt=media&amp;token=0e98722c-b5cc-4b87-b1af-964a97217b52" alt=""><figcaption></figcaption></figure>

**VBank** is a **bank plugin system** that allows you **deposit and withdraw money** via a simple and easy to use GUI.

When you deposit your money to your bank it will be saved on a virtual bank which allows players to don't lose their money if they die. In addition they can obtain an interest if they save their money on the bank system.

This plugin adds more content for the players. It is designed to be user-friendly, it is kept up to date and via our support discord you easily can get help, or just shoot your question.

<figure><img src="https://1586766809-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoyJVkonvFSGJ9CJuynNI%2Fuploads%2Fu95XvmeUv0Wbabhof4Ke%2F6bb03808e975285a4f27323bfce975f2b3a2414a.png?alt=media&amp;token=65075c01-62cc-40e2-b1b6-7aca2b643da4" alt=""><figcaption></figcaption></figure>

Join our help discord: <https://discord.gg/GGdxNGQRqN>\
or you can also contact both VictorRosillo and sarry20 through their Discord: victorrosillo / sarry20


# Installation

1. Download the VBank plugin.
2. Add the dependencies.
3. Enjoy your new bank system!

{% hint style="warning" %}
ALERT: In some updates it will be necessary to delete the config files for it to generate the new stuff. You will be notified with each update.&#x20;
{% endhint %}


# Cofiguration

## **Information about config.yml and lang.yml**

#### You can modify and deactivate all you want.

### <mark style="color:blue;">config.yml</mark>

{% code lineNumbers="true" %}

```yaml
# { task.enable } -> true if you want interest on your bank system. 
# { task.interest } -> interest percentage, max 100 
# { task.time } -> interest earning time, ( d = days ) ( h = hours ) 
#  
#  { death.enable } -> true if you want to lose money after death
#  { percent_lost } -> amount of pocket money to lose in %

config:
  task:
    enable: true
    interest: 10
    time: 1d
  death:
    enable: true
    percent_lost: 50
  update:
    message: true
  CommissionsWithdraw: true
  CommissionsStartWith: 10000
  CommissionsPercent: 4
  remaining_ticks_next_interest: 16700

```

{% endcode %}

### <mark style="color:blue;">lang.yml</mark>

{% code lineNumbers="true" %}

```yaml
language:
  message:
    prefix: '&c&lV&6&lBank &7&l»'
  interfaces:
    backItem:
      name: '&cBack'
      lore:
      - '&7Use it to go back'
  interface_generic:
    title: '&8Personal Bank'
    deposit:
      name: '&aDeposit Money'
      lore:
      - ' '
      - '&7Current balance: &a%money_pocket%'
      - '&7Money in the bank: &a%money%'
      - '&7Save your money here to keep it safe'
      - ' '
      - '&eClick to deposit your money'
    info:
      name: '&dBank information'
      lore:
      - ' '
      - '&7Current balance: &a%money_pocket%'
      - '&7Money in the bank: &a%money%'
      - ' '
      - '&a&lThe interest system is %status%'
      - ' '
      - '&7Interest percentage of the earnings are &e%interest%'
      - '&7Upcoming interest earnings each &e%time% &7day(s)'
      - '&7Upcoming earnings &a%earnings%'
      - ' '
      - '&eKeep your cursor over to see the bank information'
    withdraw:
      name: '&aWithdraw money'
      lore:
      - ' '
      - '&7Current balance: &a%money_pocket%'
      - '&7Money in the bank: &a%money%'
      - '&7Withdraw your money from the bank to use it'
      - ' '
      - '&eClick to witdraw your money'
  interface_deposit:
    title: '&aDeposit money'
    25Percent:
      name: '&aDeposit 25% of the money'
      lore:
      - ' '
      - '&7Current balance: &a%money_pocket%'
      - '&7Money in the bank: &a%money%'
      - '&7Amount to deposit: &a%amount%'
      - ' '
      - '&eClick to deposit your money'
    50Percent:
      name: '&aDeposit 50% of the money'
      lore:
      - ' '
      - '&7Current balance: &a%money_pocket%'
      - '&7Money in the bank: &a%money%'
      - '&7Amount to deposit: &a%amount%'
      - ' '
      - '&eClick to deposit your money'
    100Percent:
      name: '&aDeposit all your money'
      lore:
      - ' '
      - '&7Current balance: &a%money_pocket%'
      - '&7Money in the bank: &a%money%'
      - '&7Amount to deposit: &a%amount%'
      - ' '
      - '&eClick to deposit your money'
    customAmount:
      name: '&aDeposit custom amount of money'
      lore:
      - ' '
      - '&7Current balance: &a%money_pocket%'
      - '&7Money in the bank: &a%money%'
      - ' '
      - '&eClick to deposit your money'
  deposit:
    successful:
      message: '%prefix% &aYou have successfully deposited the money in your bank'
    customAmount:
      message: '%prefix% &aWrite the amount of money you want to save'
  interface_withdraw:
    title: '&aWithdraw money'
    25Percent:
      name: '&aWithdraw 25% of the money'
      lore:
      - ' '
      - '&7Current balance: &a%money_pocket%'
      - '&7Money in the bank: &a%money%'
      - '&7Amount to withdraw: &a%amount%'
      - ' '
      - '&eClick to withdraw your money'
    50Percent:
      name: '&aWithdraw 50% of the money'
      lore:
      - ' '
      - '&7Current balance: &a%money_pocket%'
      - '&7Money in the bank: &a%money%'
      - '&7Amount to withdraw: &a%amount%'
      - ' '
      - '&eClick to withdraw your money'
    100Percent:
      name: '&aWithdraw all your money'
      lore:
      - ' '
      - '&7Current balance: &a%money_pocket%'
      - '&7Money in the bank: &a%money%'
      - '&7Amount to withdraw: &a%amount%'
      - ' '
      - '&eClick to withdraw your money'
    customAmount:
      name: '&aWithdraw custom amount of money'
      lore:
      - ' '
      - '&7Current balance: &a%money_pocket%'
      - '&7Money in the bank: &a%money%'
      - ' '
      - '&eClick to withdraw your money'
  withdraw:
    customAmount:
      message: '&aWrite the amount of money you want to withdraw'
    successful:
      message: '%prefix% &aYou have successfully withdrawn the money from your bank'
  command_add:
    syntax:
      bad: '%prefix% Incorrect syntax, use: /vbank add (player) (amount of money)'
      good: '%prefix% Money added correctly'
  command_withdraw:
    syntax:
      bad: '%prefix% Incorrect syntax, use: /vbank withdraw (player) (amount of money)'
      good: '%prefix% Money Withdrew  correctly'
  command_set:
    syntax:
      bad: '%prefix% Incorrect syntax, use: /vbank set (player) (amount of money)'
      good: '%prefix% Money setted correctly'
  command_dont:
    rights: '%prefix% You cannot execute this command!'
  death:
    message: '%prefix% &cYou have lost %money% coins from your pocket'
  need:
    money:
      error_message: '%prefix% &aYou dont have enough money'
  error:
    desc: '%prefix% &cWrite a valid amount!'
  topten:
    message:
      top:
      - '&6Top ten money '
      - '&7-------------------------'
      bottom:
      - '&7-------------------------'
  PlaceHolder:
    TimeLeft:
      Day: ' Day(s) '
      Hour: ' Hour(s) '
      Minute: ' Minute(s) '
      Second: ' Second(s) '
    topten:
      format: '&b%player% &7- &6%money%'

```

{% endcode %}


# Commands and Permissions

{% code fullWidth="true" %}

```yaml
User Commands:
/bank (No permission need)

Admin Commands:
/giveMoney <User> <Quantity> (vbank.* or just be op)
/withdrawMoney <User> <Quantity> (vbank.* or just be op)
/setMoney <User> <Quantity> (vbank.* or just be op)
```

{% endcode %}


# Dependencies

Dependecies: Vault

Softdepends: PlaceholderAPI


