# Introduktion

På denne side kan du finde al dokumentation om vores plugins.

{% hint style="info" %}
Denne side og disse plugins tilhører ikke længere PlexHost.dk
{% endhint %}

{% content-ref url="/pages/tQEnmTQGVr0atQWEtdDe" %}
[Bande](/plugins/bande)
{% endcontent-ref %}

{% content-ref url="/pages/gXY3G07kCw0WzJWYEzv5" %}
[PrisonCells](/plugins/prisoncells)
{% endcontent-ref %}

{% content-ref url="/pages/x3Nd2f6uSPhmkKLFDs8r" %}
[ItemFlip](/plugins/itemflip)
{% endcontent-ref %}

{% content-ref url="/pages/tT95LFHsQDAa9H6aWLKy" %}
[End Crates](/plugins/end-crates)
{% endcontent-ref %}


# Bande

![](/files/b0m6KTqDJL8seKSGimPs)

{% embed url="<https://youtu.be/XU3b_C77klU>" %}

## Beskrivelse <a href="#description" id="description"></a>

**Bande** er et enormt konfigurerbart plugin til Prison servere.\
Pluginet er lavet med "addons" i hovedet, og indeholder en utrolig nem måde for andre at udvikle deres version af plugin, som de gerne vil have det.

## Features

* Indbygget GUI system.
* API til at lave dine egne addons.
  * Levels
  * Settings
  * GUI
  * Shop
* Utælleligt mange custom events til at styre pluginet.

## Permissions

<table data-header-hidden><thead><tr><th width="200.32856419721702">Beskrivelse</th><th width="150"></th><th width="150">Command</th><th width="249.33333333333331">Permission</th></tr></thead><tbody><tr><td><strong>Command</strong></td><td><strong>Alias</strong></td><td><strong>Permission</strong></td><td><strong>Beskrivelse</strong></td></tr><tr><td>/bande</td><td>/b</td><td>bande.use</td><td>Tilgå bande menuen.</td></tr><tr><td>/bande reload</td><td>/b reload</td><td>bande.reload</td><td>Reloader alle filerne (ikke selve banderne).</td></tr><tr><td>/bande info</td><td>/b info</td><td>bande.info</td><td>Viser information om pluginet.</td></tr><tr><td>/bande addons</td><td>/b addons</td><td>bande.addons</td><td>Viser installerede addons.</td></tr></tbody></table>

{% hint style="info" %}
Permissions **bande.admin** og **bande.\*** giver adgang til alt i pluginet.
{% endhint %}

## Dependencies

* [Vault](https://www.spigotmc.org/resources/vault.34315/)
* [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/) (valgfrit)
* [PlexCore](https://plexhost.dk/plugins)

## Links

* Java Docs: <https://docs.plexhost.dk/bande/>
* McSkripts: <https://mcskripts.net/view/id/5133>

## Todo

* [ ] MongoDB & MariaDB Support.


# Installation

1. **Stop** din server.
2. Put **bande.jar** filen ind i din **/plugins** mappen.
3. Download alle [**dependencies**](https://developer.plexhost.dk/plugins/bande#dependencies).
4. **Start** din server.


# Konfiguration


# Config.yml

{% code title="config.yml" %}

```yaml
license: Your License Key

# Prisen for at oprette en bande, sæt til 0 for gratis.
bande_price: 2500
rename_price: 10000
debug: false
bande_minimum_length: 3
bande_maximum_length: 12

default_max_members: 3
default_max_allies: 1
default_max_rivals: 1

placeholders:
  no_bande: "Ingen"
  true: "&aJa"
  false: "&cNej"

# Tid der skal gå mellem at folk "søger" efter bander med /bande <navn> kommandoen - behold over 3 for at undgå lag.
command_cooldown: 3

# Hvor mange minutter der går mellem alle bander bliver gemt.
# Vigtige data bliver gemt med det samme.
save_minutes: 10

# Hvor mange minutter der går mellem hver gang leaderboardsne opdatere.
leaderboard_minutes: 15

# Bander kan ikke hedde disse navne.
# Skal skrives med lowerCase (små bogstaver)
banned_names:
  - neger

# Om pluginet skal styre chat, eller du selv vil implementere noget.
handle_chat: true
```

{% endcode %}


# Messages.yml

{% hint style="info" %}
Alle beskeder bliver behandlet som en **List\<String>**, så du kan derfor lave flere linjer hvis du vil.
{% endhint %}

{% code title="messages.yml" %}

```yaml
prefix: "&8&l┃ &b&lBande &8&l┃" # Skal være 1 linje.
no_bande: "&8&l┃ &c&lBande &8&l┃ &7Du er ikke medlem af nogen bande.."
player_only: "&8&l┃ &c&lBande &8&l┃ &7Denne kommando kan kun bruges af spillere."
console_only: "&8&l┃ &c&lBande &8&l┃ &7Denne kommando kan kun bruges af consolen."
no_permission: "&8&l┃ &c&lBande &8&l┃ &7Du har ikke adgang til denne kommando."
bande_not_found: "&8&l┃ &c&lBande &8&l┃ &7Der blev ikke fundet en bande med navnet &c{0}"
command_on_cooldown: "&8&l┃ &c&lBande &8&l┃ &7Du skal vente &c{0} &7før du kan bruge denne kommando igen."
error_occurred: "&8&l┃ &c&lBande &8&l┃ &cDer skete en fejl, kontakt en administrator."
not_member_of_bande: "&8&l┃ &c&lBande &8&l┃ &7Du er ikke medlem af banden &c{0}"
no_access: "&8&l┃ &c&lBande &8&l┃ &7Du har ikke adgang til at gøre dette."
reload:
  starting: "&8&l┃ &b&lBande &8&l┃ &7Starter reload af bande."
  success: "&8&l┃ &a&lBande &8&l┃ &aBande er successfuldt blevet reloadet."
  error: "&8&l┃ &c&lBande &8&l┃ &cDer skete en fejl under reload af bande."
groups: # Skal være 1 linje.
  leader:
    title: Leder
    color: "&5"
  admin:
    title: Admin
    color: "&d"
  officer:
    title: Officer
    color: "&e"
  member:
    title: Medlem
    color: "&a"
  unknown:
    title: Ukendt
    color: "&7"
time: # Skal være 1 linje.
  day:
    singular: dag
    plural: dage
    abbreviation: d
  hour:
    singular: time
    plural: timer
    abbreviation: h
  minute:
    singular: minut
    plural: minutter
    abbreviation: m
  second:
    singular: sekund
    plural: sekunder
    abbreviation: s
  and: og
  since: siden
ally_chat:
  usage: 'Brug /allychat <besked>'
  message:
    - "[ALLYCHAT]"
    - "[{0}] {1}: {2}"
bande_chat:
  usage: 'Brug /bandechat <besked>'
  message:
    - "[BANDECHAT]"
    - "[{0}] {1}: {2}"
create_bande:
  not_enough_money: "&8&l┃ &c&lBande &8&l┃ &7En bande koster &c${0} &7og du mangler &c${1}"
  already_have_bande: "&8&l┃ &c&lBande &8&l┃ &7Du er allerede medlem af banden &c{0}"
  input_prompt:
    - "&8&l┃ &b&lBande &8&l┃ &7Skriv din kommende bandes navn i chatten."
    - "&8&l┃ &b&lBande &8&l┃ &7Du kan skrive &b'!cancel'&7 for at annullere."
  response:
    cancel: "&8&l┃ &b&lBande &8&l┃ &7Du kan nu bruge chatten igen!"
    bande_exists: "&8&l┃ &c&lBande &8&l┃ &7Der findes allerede en bande med dette navn."
    name_too_short: "&8&l┃ &c&lBande &8&l┃ &7Bandens navn skal mindst indeholde &c{0} tegn."
    name_too_long: "&8&l┃ &c&lBande &8&l┃ &7Bandens navn kan højst indeholde &c{0} tegn."
    only_alphabetical: "&8&l┃ &c&lBande &8&l┃ &7Navnet kan kun indeholde bogstaverne fra &cA &7til &cZ."
    banned_name: "&8&l┃ &c&lBande &8&l┃ &7Du kan ikke oprette en bande med dette navn."
    bande_created:
      - "&8&l┃ &b&lBande &8&l┃ &7Du har oprettet banden &b{0}"
delete_bande:
  player_deleted_bande: "&8&l┃ &c&lBande &8&l┃ &c{0} &7har slettet banden &c{1}"
  you_deleted_bande: "&8&l┃ &b&lBande &8&l┃ &7Du har slettet din bande &b{0}"
leave_bande:
  player_left_bande: "&8&l┃ &c&lBande &8&l┃ &c{0} &7har forladt din bande."
  you_left_bande: "&8&l┃ &b&lBande &8&l┃ &7Du har forladt banden &b{0}"
player_invitations:
  invitation_not_available: "&8&l┃ &c&lBande &8&l┃ &7Denne invitation findes ikke mere."
  has_reached_max_members: "&8&l┃ &c&lBande &8&l┃ &7Banden &c{0} &7har ikke plads til flere medlemmer."
  you_joined_bande: "&8&l┃ &b&lBande &8&l┃ &7Du har joinet banden &b{0}"
  player_joined_bande: "&8&l┃ &b&lBande &8&l┃ &b{0} &7har joinet banden."
bande_invitations:
  player_is_not_invited: "&8&l┃ &c&lBande &8&l┃ &7Spilleren &c{0} &7er ikke inviteret til banden."
  remover_invitation_removed: "&8&l┃ &c&lBande &8&l┃ &c{0}'s &7invitation er blevet fjernet."
  invited_invitation_removed: "&8&l┃ &b&lBande &8&l┃ &7Din invitation fra banden &c{0} &7er blevet fjernet af &c{1}"
invite_member:
  input_prompt:
    - "&8&l┃ &b&lBande &8&l┃ &7Skriv navnet på spilleren du vil invitere."
    - "&8&l┃ &b&lBande &8&l┃ &7Du kan skrive &b'!cancel'&7 for at annullere."
  response:
    cancel: "&8&l┃ &b&lBande &8&l┃ &7Du kan nu bruge chatten igen!"
  player_is_not_found: "&8&l┃ &c&lBande &8&l┃ &7Spilleren &c{0} &7er ikke online."
  cant_invite_yourself: "&8&l┃ &c&lBande &8&l┃ &7Du kan ikke invitere dig selv til banden."
  already_member_of_bande: "&8&l┃ &c&lBande &8&l┃ &c{0} &7er allerede medlem af din bande."
  already_invited: "&8&l┃ &c&lBande &8&l┃ &c{0} &7er allerede blevet inviteret."
  inviter_success: "&8&l┃ &b&lBande &8&l┃ &7Du har inviteret &b{0} &7til banden."
  invited_success: "&8&l┃ &b&lBande &8&l┃ &7Du er blevet inviteret til &b{1} &7af &b{0}"
deposit_money:
  input_prompt:
    - "&8&l┃ &b&lBande &8&l┃ &7Indtast beløber du ønsker at indsætte."
    - "&8&l┃ &b&lBande &8&l┃ &7Du kan skrive &b'!cancel'&7 for at annullere."
  response:
    cancel: "&8&l┃ &b&lBande &8&l┃ &7Du kan nu bruge chatten igen!"
    only_numbers: "&8&l┃ &c&lBande &8&l┃ &cDu kan kun indsætte hele beløber."
    not_enough_money: "&8&l┃ &c&lBande &8&l┃ &7Du mangler &c${0} &7for at indsætte dette beløb."
    transaction_successful: "&8&l┃ &b&lBande &8&l┃ &7Du har indsat &b${0} &7på din bandes konto, i har nu &b${1}"
    player_transaction: "&8&l┃ &b&lBande &8&l┃ &b{0} &7har indsat &b${1} &7på din bandes konto, i har nu &b${2}"
rename_bande:
  input_prompt:
    - "&8&l┃ &b&lBande &8&l┃ &7Indtast dit ønskede bandenavn."
    - "&8&l┃ &b&lBande &8&l┃ &7Du kan skrive &b'!cancel'&7 for at annullere."
  response:
    cancel: "&8&l┃ &b&lBande &8&l┃ &7Du kan nu bruge chatten igen!"
    not_enough_money: "&8&l┃ &c&lBande &8&l┃ &7Det koster &b${0} &7at rename, og banden mangler &b${1}"
    bande_renamed:
      - "&8&l┃ &b&lBande &8&l┃ &7Din bande er blevet renamet fra &b{0} &7til &b{1}"
bande_members:
  cant_edit_yourself: "&8&l┃ &c&lBande &8&l┃ &7Du kan ikke ændre på dig selv."
  cant_edit_player: "&8&l┃ &c&lBande &8&l┃ &7Du kan ikke ændre på &c{0}."
edit_member:
  member_edited: "&8&l┃ &b&lBande &8&l┃ &b{0}'s &7rolle er blevet ændret til &b{1} &7af &b{2}"
  demoted_yourself: "&8&l┃ &b&lBande &8&l┃ &7Du har givet &b{0} &7Leder og er derfor blevet demoted til Admin."
kick_member:
  cant_kick_player: "&8&l┃ &c&lBande &8&l┃ &7Du har ikke adgang til at ikke kicke &b{0}."
  you_kicked_player: "&8&l┃ &b&lBande &8&l┃ &7Du har kicket &b{0} &7fra banden."
  player_kicked_member: "&8&l┃ &b&lBande &8&l┃ &b{0} &7har kicket &b{1} &7fra banden."
  you_have_been_kicked: "&8&l┃ &c&lBande &8&l┃ &7Du er blevet kicket fra &c{0} &7af &c{1}"
add_ally:
  input_prompt:
    - "&8&l┃ &b&lBande &8&l┃ &7Skriv navnet på banden du vil blive allierede med."
    - "&8&l┃ &b&lBande &8&l┃ &7Du kan skrive &b'!cancel'&7 for at annullere."
  response:
    cancel: "&8&l┃ &b&lBande &8&l┃ &7Du kan nu bruge chatten igen"
    ally_already_added: "&8&l┃ &b&lBande &8&l┃ &7Du har spurgt &b{0} &7om allierede."
    bande_already_added: "&8&l┃ &b&lBande &8&l┃ &7Banden &b{0} &7har spurgt din bande som allierede, accepter den inden under invitationer."
    ally_added: "&8&l┃ &b&lBande &8&l┃ &7Du har spurgt banden &b{0} &7om allierede."
    bande_has_send_invitation: "&8&l┃ &b&lBande &8&l┃ &7Banden &b{0} &7har spurgt din bande om allierede."
remove_ally:
  player_has_removed_ally: "&8&l┃ &b&lBande &8&l┃ &b{0} &7har fjernet banden &b{1} &7som allierede"
  you_have_remove_ally: "&8&l┃ &b&lBande &8&l┃ &7Du har fjernet banden &b{0} &7som allierede."
  has_removed_you_as_ally: "&8&l┃ &c&lBande &8&l┃ &7Banden &c{0} &7har fjernet jer som allierede."
accept_ally:
  bande_has_reached_max_allies: "&8&l┃ &c&lBande &8&l┃ &7Din bande har ikke plads til flere allierede."
  ally_has_reached_max_allies: "&8&l┃ &c&lBande &8&l┃ &7Banden &c{0} &7har ikke plads til flere allierede."
  has_accepted_ally: "&8&l┃ &b&lBande &8&l┃ &7Du har startet en alliance med banden &b{0}"
  has_become_ally_with: "&8&l┃ &b&lBande &8&l┃ &7Din bande er nu allierede med &b{0}"
  cant_add_your_own_bande: "&8&l┃ &c&lBande &8&l┃ &7Du kan ikke spørger din egen bande om allierede."

add_rival:
  input_prompt:
    - "&8&l┃ &b&lBande &8&l┃ &7Skriv navnet på banden du vil blive rivaler med."
    - "&8&l┃ &b&lBande &8&l┃ &7Du kan skrive &b'!cancel'&7 for at annullere."
  response:
    cancel: "&8&l┃ &b&lBande &8&l┃ &7Du kan nu bruge chatten igen."
    already_rival: "&8&l┃ &c&lBande &8&l┃ &7Din bande er allerede rivaler med &c{0}"
    you_have_rival_added: "&8&l┃ &b&lBande &8&l┃ &7Du har tilføjet banden &b{0} &7som rivaler."
    player_have_rival_added: "&8&l┃ &b&lBande &8&l┃ &b{0} har tilføjet banden &b{1} &7som rival."
    cant_rival_your_own_bande: "&8&l┃ &c&lBande &8&l┃ &7Du kan ikke gøre din egen bande til rival."
    reached_max_rivals: "&8&l┃ &c&lBande &8&l┃ &7Din bande har ikke plads til flere rivaler."
remove_rival:
  player_has_removed_rival: "&8&l┃ &b&lBande &8&l┃ &c{0} &7har fjernet banden &c{1} &7som rival."
  you_have_remove_rival: "&8&l┃ &b&lBande &8&l┃ &7Du har fjernet banden &b{0} &7som rival."
bande_shop:
  not_enough_money: "&8&l┃ &c&lBande &8&l┃ &7Din bande har ikke råd til dette."
  maximized_item: "&8&l┃ &c&lBande &8&l┃ &cDin bande har opnået max i dette level."
  bought_item: "&8&l┃ &b&lBande &8&l┃ &7Du har købt &b{0} &7for &b${1} &7til banden."
  player_has_bought_item: "&8&l┃ &b&lBande &8&l┃ &b{0} &7har købt &b{1} &7for &b${2} &7til banden."
levelup:
  missing_requirements: "&8&l┃ &c&lBande &8&l┃ &7Din bande har ikke løst alle opgaverne."
  bande_levelup: "&8&l┃ &a&lBande &8&l┃ &7Din bande er steget i &alevel &2{0}"
  max_level: "&8&l┃ &c&lBande &8&l┃ &7Din bande et i max level."
chat_format:
  no_gang: "{0}{1}{2}&8: &f{3}"
  in_gang:
    member: "&8[&a{0}{1}&8][&a{2}&8]{3}{4}{5}&8: &f{6}"
    ally: "&8[&a{0}{1}&8][&a{2}&8]{3}{4}{5}&8: &f{6}"
    rival: "&8[&c{0}{1}&8][&c{2}&8]{3}{4}{5}&8: &f{6}"
    default: "&8[&7{0}{1}&8][&7{2}&8]{3}{4}{5}&8: &f%2$s"
gui: # Gui
  information:
    allies:
      ally: "&8 ● &a{0}"
      and_x_more: "&8 ● &7Og &a{0} &7flere."
      no_allies: "&8 ● &7I har ingen allierede."
    rivals:
      no_rivals: "&8 ● &7I har ingen rivaler."
      no_rivals_against:
      - "&8 ● &7I har ingen rivaler."
      - "&8   &7mod jer."
      rival: "&8 ● &c{0}"
      and_x_more: "&8 ● &7Og &c{0} &7flere."
    members:
      member: "&8 ● &8[&7{0}&8] &7{1}"
  information_other:
    allies:
      ally: "&8 ● &a{0}"
      and_x_more: "&8 ● &7Og &a{0} &7flere."
      no_allies: "&8 ● &7Banden har ingen allierede."
    rivals:
      no_rivals: "&8 ● &7Banden har ingen rivaler."
      no_rivals_against:
        - "&8 ● &7Banden har ingen."
        - "&8   &7rivaler mod sig."
      rival: "&8 ● &c{0}"
      and_x_more: "&8 ● &7Og &c{0} &7flere."
    members:
      member: "&8 ● &8[&7{0}&8] &7{1}"
```

{% endcode %}


# Levels

Hvordan laver man levels?

1. Vi starter med at oprette en `level1.yml` fil i mappen `/levels`
2. Så tilføjer vi hvilket level det tilhører.\
   `level: 1`
3. Og nu kommer vi til det sjove, nemlig at lave kravene.\
   Vi tilføjer først `requirements:` til filen.

Hvert et krav indeholder 3 dele.

1. **Kravet.**\
   Selve kravet bruger en relativ nem struktur. \
   Du opstiller den som en condition i en String.\
   Her er det nemmest at bruge de indbyggede placeholders til at opnå\
   det ønskede resultat.\
   \
   Vi tager et eksempel hvor vi vil have et krav, hvor ens Bande Skade skal være \
   mindre eller lig med 95.\
   \
   Det første del af **conditionen** er så vores bande skade, \*\
   som har placeholderen: `<shop_bandeskade>`\
   \
   Den anden del er **operatoren**, altså at det skal mindre eller lig med.\
   Følgende operators kan bruges:\
   \- **`=`** og **`==`** (lig med)\
   \- **`<=`** og **`=<`** (mindre eller lig med)\
   \- **`>=`** og **`=>`** (større eller lig med)\
   \- **`>`** (større end)\
   \- **`<`** (mindre end)\
   \
   Vi kan så se at **mindre eller lig med** operatoren er **`<=`** \
   \
   Den sidste del er så tallet, vi skal bruge tallet **95.**\
   \
   Så skal vi bare sætte den sammen.\
   Så den ender med at se ud som: `requirement: "<shop_bandeskade><=95"`<br>
2. **Tekst der vises når man har klaret det.**\
   Det opstilles som: `completed: "&a&l✔ &aKøb bandeskade ned til &295%"`<br>
3. **Tekst der vises når man ikke har klaret det.**\
   Det opstilles som: `not-completed: "&c&l✘ &7Køb bandeskade ned til &c95%"`<br>

Jeg har lige været så venlig at færdiggøre den for jer, så i kan se hvordan det første default level ser ud.

{% code title="level1.yml" %}

```yaml
level: 1 # Bandens level for at det er disse krav der gælder.
requirements:
  1:
    requirement: "<shop_bandeskade><=95"
    text:
      completed: "&a&l✔ &aKøb bandeskade ned til &295%"
      not-completed: "&c&l✘ &7Køb bandeskade ned til &c95%"
  2:
    requirement: "<amount_members>>=2"
    text:
      completed: "&a&l✔ &aOpnå &22 medlemmer&a i banden."
      not-completed: "&c&l✘ &7Opnå &c2 medlemmer&7 i banden."
  3:
    requirement: "<amount_allies>>=1"
    text:
      completed: "&a&l✔ &aOpnå &21 allieret&a i banden."
      not-completed: "&c&l✘ &7Opnå &c1 allieret&7 i banden."
```

{% endcode %}


# GUI

### GUI Layout

{% code title="default\_gui.yml" %}

```yaml
gui:
    id: default_gui
    title: '&a&lDefault GUI'
    rows: 5
    slots:
        disabled_slot:
            enabled: false # Defaulter til true, så ikke nødvendig at skrive.
            item:
                ....
        enabled_slot:
            item:
                ....
```

{% endcode %}

### Item Layout

{% code title="default\_gui.yml" %}

```yaml
gui:
    ...
    slots:
        head:
            item:
                name: '&l&lSejt Hovede?!'
                lore:
                - "Dette item har"
                - "en lore. OMG"
                material: SKULL
                value: "eeyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNGRjY2IyNmExYjc1NWFkMjZkYTgwNWE0NmZhMmVhYjVjMWZkYmY1ZDU3Njg3YzkxMGRlNTY3N2MyMDBlYmM2MyJ9fX0"
                enchanted: true
                slot: 29
        dye:
            item:
                name: '&l&lFarve'
                material: INK_SACK
                data: 7
                slot: 29
                
```

{% endcode %}


# Permissions

{% code title="example.yml" %}

```yaml
id: example # Internal navn på permissionen.
name: Example # Det viste navn på permissionen.
default: 3 # Default valuen i banden. 1 = leder, 2 = admin, osv...
slot: 21 # Slottet hvor permissionen bliver vist i Permission Menuen.
description: # {description} i permission.yml
  - "&fEksempel lore"
  - "&f:)"
```

{% endcode %}


# Settings


# Shop


# Leaderboard

{% code title="leaderboards.yml" %}

```yaml
leaderboards:
  kills: # the name of the stat it tracks
    item:
      name: "&d&lBANDE KILLS"
      material: DIAMOND_SWORD
      slot: 21
      lore:
        - "&7Top 10 bander med flest kills"
        - "&8&m------------------------------"
        - "&8[&a&l#1&8] &f{leaderboard_name_1} &8- &a{leaderboard_stat_1}"
        - "&8[&e&l#2&8] &f{leaderboard_name_2} &8- &e{leaderboard_stat_2}"
        - "&8[&c&l#3&8] &f{leaderboard_name_3} &8- &c{leaderboard_stat_3}"
        - "&8[&7&l#4&8] &f{leaderboard_name_4} &8- &7{leaderboard_stat_4}"
        - "&8[&7&l#5&8] &f{leaderboard_name_5} &8- &7{leaderboard_stat_5}"
        - "&8[&7&l#6&8] &f{leaderboard_name_6} &8- &7{leaderboard_stat_6}"
        - "&8[&7&l#7&8] &f{leaderboard_name_7} &8- &7{leaderboard_stat_7}"
        - "&8[&7&l#8&8] &f{leaderboard_name_8} &8- &7{leaderboard_stat_8}"
        - "&8[&7&l#9&8] &f{leaderboard_name_9} &8- &7{leaderboard_stat_9}"
        - "&8[&7&l#10&8] &f{leaderboard_name_10} &8- &7{leaderboard_stat_10}"
        - "&8&m------------------------------"
```

{% endcode %}


# Addons

Bande indeholder sin egen **AddonLoader**, og har en bestemt måde du skal implementere det på. Det fungere næsten lige som et almindeligt plugin.


# Create Addon

### Step 1 - Create Project

Start et almindeligt Java Projekt, som du ville gøre når du ville lave et plugin.

### Step 2 - Import with Maven

For at importere **Bande**, skal du blot tilføje denne kode til din **pom.xml.**

{% code title="pom.xml" %}

```xml
    <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>com.github.plexhost</groupId>
            <artifactId>bande-plugin</artifactId>
            <version>{VERSION}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
```

{% endcode %}

### Step 3 - Create Addon.yml file

For at pluginet kan registere dit Addon, skal du tilføje en **addon.yml** fil til din **resource-mappe**, som giver pluginet information om dit addon.

{% code title="addon.yml" %}

```
name: ExampleAddon
main: org.example.addon.ExampleAddon
version: 1.2
authors: [Plexhost.dk]
description: Beskrivelse
```

{% endcode %}

### Step 4 - Create Main Class

Du skal nu oprette en java class, som **"main"** refere til i addon.yml.\
I vores tilfælde er det en class med navnet **ExampleAddon** i packagen **org.example.addon**

Classen skal **extend** classen **BandeAddon**

{% code title="ExampleAddon.java" %}

```java
package org.example.addon;

import dk.plexhost.bande.addon.BandeAddon;
import dk.plexhost.bande.events.BandeCreateEvent;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class ExampleAddon extends BandeAddon implements Listener {

    @Override
    public void onEnable() {
        /*
         * We register the EventListener here.
         */
        Bukkit.getPluginManager().registerEvents(this, getMainPlugin());
    }

    @EventHandler
    public void onBandeCreate(BandeCreateEvent event){
        /*
         * We log to the console, that a new Bande has been created.
         */
        this.getMainPlugin().getLogger().info(event.getPlayer().getName() + " created bande " + event.getBande().getName());
    }


}

```

{% endcode %}

### Step 5 - Register Addon

Det eneste du skal gøre for at dit addon bliver registeret, er at smide det ind i **/plugins/Bande/addons** mappen.


# BandeAddon classen.

{% code title="BandeAddon.java" %}

```java
public abstract class BandeAddon {
    
    // Bliver callet når et addon bliver disabled.
    public void onDisable(){};

    // Bliver callet når et addon bliver enabled.
    public void onEnable(){};

    // Bliver callet når et addon bliver reloaded.
    public void onReload(){};
    

    // Disable / Enable et addon
    public void setEnabled(boolean enabled){};
    
    // Returner om addonet er enabled.
    public boolean isEnabled(){};
    
    // Returner en addon.yml som class.
    public AddonDescriptionFile getDescription(){};

    // Returner instancen af Bande pluginet.
    public JavaPlugin getMainPlugin(){}

    // Returner Bande pluginets logget.
    public Logger getLogger();
    
    // Returner Addons Data Folder.
    // plugins/Bande/addons/ExampleAddon/
    public File getAddonFolder();

    // Gemmer en fil der ligger i Addons Resource Mappe.
    public void saveResource(String resourcePath, boolean replace) {}
    
}

```

{% endcode %}


# Add your own level

Lær hvordan du kan integere dine egne levels i pluginet.

Alle Levels kræver sin egen class som extender **BandeLevel.**

{% code title="Level\_2.java" %}

```java
package org.example.addon.levels;

import dk.plexhost.bande.addons.BandeLevel;
import dk.plexhost.bande.bande.Bande;

import java.util.ArrayList;
import java.util.List;

// Vi extender BandeLevel for at vi kan registere levelet senere hen.
public class Level_2 extends BandeLevel {

    // Denne funktion bliver callet når nogle prøver at level op.
    @Override
    public boolean meetsRequirements(Bande bande) {
        
        // Går igennem kravene og returner false hvis de ikke bliver opfyldt.
        if(bande.getBandeSkade() > 95) return false;

        // Return true for at fortælle pluginet af banden kan level op.
        return true;
    }

    // Dette er en liste over tekst der bliver vist i ens Bande Information GUI.
    @Override
    public List<String> getRequirementsMessage(Bande bande) {
        List<String> response = new ArrayList<>();
        
        // Banden opfylder ikke krav.
        if(bande.getBandeSkade() > 95) response.add("&c&l✘ &7Køb bandeskade ned til &c95%");
        
        // Banden opfylder kravet.
        else response.add("&a&l✔ &aKøb bandeskade ned til &295%");

        return response;
    }
}
```

{% endcode %}

Perfekt! Nu har vi lavet vores første level, så nu skal vi bare tilføje det til systemet.\
Det gør vi ved at brug af **BandeAPI** classen.

{% code title="ExampleAddon.java" %}

```java
package org.example.addon;

import dk.plexhost.bande.addon.BandeAddon;
import dk.plexhost.bande.BandePlugin;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

import org.example.addon.levels.*;

public class ExampleAddon extends BandeAddon {

    @Override
    public void onEnable() {
        
        // Vi kører methoden der hooker vores levels ind i systemet.
        this.enableLogins();
    }
    
    // Denne method bliver kørt hver gang at /bande reload bliver kørt.
    // Vi tilføjer levelsne igen, fordi at de bliver fjernet under en reload.
    @Override
    public void onReload() {
        
        // Vi kører methoden der hooker vores levels ind i systemet.
        this.enableLogins();
    }
    
    // Vi laver en method fordi at vi skal hook levels ind i pluginet flere gange.
    private void enableLogins(){
    
        // Vi tilføjer vores nye level til levelet 2.
        // Det betyder at en level 1 bande skal opfylde disse krav.
        BandePlugin.getAPI().addLevel(2, new Level_2());
    }

}

```

{% endcode %}


# Skript-Reflect Snippet

```vbnet
import:
    dk.plexhost.bande.BandePlugin

load:
    set {BANDE} to BandePlugin.getAPI()

offlineplayer property bande:
    return type: object
    get:
        return {BANDE}.getBande(expr-1)

offlineplayer property bande id:
    return type: number
    get:
        return (expr-1's bande).getId()

offlineplayer property bande name:
    return type: text
    get:
        return (expr-1's bande).getName()

expression b-stat %text% of %player%'s bande:
    return type: number
    get:
        set {_bande} to expr-2's bande
        if {_bande} is not set:
            stop
        return {_bande}.getStat(expr-1)
    set:
        set {_bande} to expr-2's bande
        if {_bande} is not set:
            stop
        {_bande}.setStat(expr-1, the change value)
    add:
        set {_bande} to expr-2's bande
        if {_bande} is not set:
            stop
        {_bande}.addStat(expr-1, the change value)
    remove:
        set {_bande} to expr-2's bande
        if {_bande} is not set:
            stop
        set {_current} to {_bande}.getStat(expr-1)
        {_bande}.setStat(expr-1, {_current}-the change value)
    reset:
        set {_bande} to expr-2's bande
        if {_bande} is not set:
            stop
        {_bande}.setStat(expr-1, 0)


condition %player% has bande:
    check:
        set {_bande} to expr-1's bande
        if {_bande} is set:
            continue

condition %player% has bande permission %string%:
    check:
        set {_bande} to expr-1's bande
        if {_bande} is not set:
            stop
        if {_bande}.getRank(expr-1.getUniqueId()) <= {_bande}.getPermission(expr-2):
            continue
```


# Java Docs

Du kan finde pluginet's Java Docs på: <https://docs.plexhost.dk/bande/>


# Placeholders

Dette er alle Placeholders der fungere i GUI


# PlaceholderAPI

Disse Placeholders kræver at PlaceholderAPI er installeret.

**Placeholder:** %placeholder%

<table><thead><tr><th width="321.8397620351333">Placeholder</th><th width="288.57639145056">Beskrivelse</th><th>Eksempel</th></tr></thead><tbody><tr><td><code>%bande_config_&#x3C;key>%</code></td><td>Vis config values.</td><td><code>%bande_config_bande_price%</code></td></tr><tr><td><code>%bande_player_invitations%</code></td><td>Viser antallet af ens bande invitationer.</td><td>-</td></tr><tr><td><code>%bande_name%</code></td><td>Viser din bandes navn, eller <code>placeholders.no_bande</code> hvis du ikke er medlem af en.</td><td> -</td></tr><tr><td><code>%bande_id%</code><br><code>%bande_bank%</code><br><code>%bande_level%</code></td><td>Viser din bandes id.<br>Viser din bandes bank.<br>Viser din bandes level.</td><td>-</td></tr><tr><td></td><td></td><td></td></tr></tbody></table>


# Indbygget Placeholders

Indbyggede Placeholders kan bruges overalt i GUI's hvor at et Bande objekt er tilstede.

**Placeholder:** \<placeholder>

<table><thead><tr><th width="275.1757214648392">Placeholder</th><th width="242.90025867747383">Beskrivelse</th><th>Eksempel</th></tr></thead><tbody><tr><td><code>&#x3C;name></code><br><code>&#x3C;name_upper></code><br><code>&#x3C;name_lower></code><br><code>&#x3C;name_capitalized></code></td><td>Viser bandens navn.</td><td>-</td></tr><tr><td><code>&#x3C;id></code><br><code>&#x3C;level></code><br><code>&#x3C;bank></code><br><code>&#x3C;owner></code><br><code>&#x3C;created></code><br><code>&#x3C;lastseen></code></td><td>Viser bandens id.<br>Viser bandens level.<br>Viser bandens bank.<br>Viser bandens ejer (navn)<br>Viser bandens oprettelse.<br>Viser bandens sidst set.</td><td>-</td></tr><tr><td></td><td></td><td></td></tr><tr><td><code>&#x3C;stat_{stat}></code></td><td>Viser en bandens stat.</td><td><code>&#x3C;stat_kills></code></td></tr><tr><td><code>&#x3C;amount_{type}></code></td><td>Viser antallet af henholdsvis,<br><code>members</code>, <code>allies</code>, <code>rivals_own</code>, <code>rivals_against</code></td><td><code>&#x3C;amount_members></code><br><code>&#x3C;amount_rivals_own></code></td></tr><tr><td><code>&#x3C;max_{type}></code></td><td>Viser max af henholdsvis,<br><code>members</code>, <code>allies</code>, <code>rivals</code></td><td><code>&#x3C;max_allies></code></td></tr><tr><td><code>&#x3C;permission_{type}></code></td><td>Viser hvilken rank man mindst skal være for en permission.</td><td><code>&#x3C;permission_invitations></code></td></tr><tr><td><code>&#x3C;shop_{type}></code></td><td>Viser antallet af et af shop itemsne: <br><code>bandeskade</code>, <code>allyskade</code></td><td></td></tr></tbody></table>


# GUI Placeholders

De flest af GUI har nogle Placeholders der er specifik til dem.\
Placeholderen for dem er **{placeholder}**

Du kan finde dem i brug i default .yml filerne, men ellers kan du finde dem i source koden.


# PrisonCells

![](/files/QAm1F8zcc5aC09oVkDSl)

{% embed url="<https://youtu.be/XEkhXFdMpN0>" %}

## Beskrivelse <a href="#description" id="description"></a>

**PrisonCells** er den perfekte løsning til dig der går rundt og leder efter et godt celle system. Systemet indeholder alt det basiske som du forventer af et celle system, derudover er der indbygget et admin panel, og spækket med admin kommandoer.

## Features

* Konfigurabelt design
* Admin GUI
* Admin kommandoer
* Nemt at bruge og opsætte
* <mark style="color:green;">**Det bedste på markedet!**</mark>

## Permissions

<table data-header-hidden><thead><tr><th width="150">Beskrivelse</th><th width="150"></th><th width="219">Command</th><th width="249.33333333333331">Permission</th></tr></thead><tbody><tr><td><strong>Command</strong></td><td><strong>Alias</strong></td><td><strong>Permission</strong></td><td><strong>Beskrivelse</strong></td></tr><tr><td>/cell</td><td>/ce</td><td>cells.use</td><td>Normal celle kommando.</td></tr><tr><td>/celladmin</td><td>/cea</td><td>cells.admin</td><td>Admin celle kommando.</td></tr><tr><td>-</td><td>-</td><td>cells.cooldown.bypass</td><td>Adgang til at bypass celle slet cooldown.</td></tr><tr><td>-</td><td>-</td><td>cells.rent.&#x3C;gruppe></td><td>Adgang til at leje celler i celle gruppe</td></tr><tr><td>-</td><td>-</td><td>cells.amount.&#x3C;antal></td><td>Adgang til at leje et antal celler.</td></tr></tbody></table>

{% hint style="info" %}
Permissions **cells.\*** giver adgang til alt i pluginet.
{% endhint %}

## Dependencies

* [Vault](https://www.spigotmc.org/resources/vault.34315/)
* [PlexCore](https://plexhost.dk/plugins)
* [WorldGuard 6.2](https://dev.bukkit.org/projects/worldguard/files/956770)
* [WorldEdit 6.1.9](https://dev.bukkit.org/projects/worldedit/files/2597538)

## Links

* Java Docs: [https://docs.plexhost.dk/prisoncells/](https://docs.plexhost.dk/prisoncells)
* McSkripts: <https://mcskripts.net/view/id/5391>


# Installation

* **Stop** din server.
* Put **PrisonCells.jar** filen ind i din **/plugins** mappen.
* Download alle [**dependencies**](https://developer.plexhost.dk/plugins/prisoncells#dependencies).
* **Start** din server.


# Konfiguration


# Config

{% code title="config.yml" %}

```yaml
# License Key
license: Your License Key

# Groups that are automatically added to every cell.
added-groups:
  - inspektør
  - officer

# Debug mode?
debug: false

# Standard prisen, for alle nye celler, hvis prisen ikke er angivet.
defaultPrice: 300

# Standard maximum antal af dage, som man kan leje en celle i. Brug -1 for uendelig.
defaultMaxLength: 10

# Standard max medlemmer
defaultMaxMembers: 5

# Standard om ens celles blocks bliver sat til AIR, når du unrenter den.
defaultResetOnUnrent: false

# Om du modtager resterende dage i penge, når du sælger cellen.
refund: false

# Om der skal være cooldown på når man vil købe ny celle.
cooldown:
  enabled: false
  length: 3600 # Længden af cooldown i sekunder

# Hvilket design som celle skilte har, når vdu bruger placeholderen %timeLeft%
# Tegnet '||' viser hvordan det vil se ud med forskellige længder af tid tilbage.
# Designs:
#  > 1: 2d19t21m || 4t21m
#  > 2: 7 dage || 5 timer || 21 minutter
timeLeftDesign: 2

# Skilt design
sign:
  rented:
    - '&c&lSOLGT'
    - '&c%cell%'
    - '&c%owner%'
    - '&c%timeleft%'
  available:
    - '&3&lTIL SALG'
    - '&b%cell%'
    - '&b$%price%'
    - '&b1 dag'
  removed:
    - ''
    - '&cCelle fjernet'
    - ''
    - ''
#
locale:
  days:
    singular: dag
    plural: dage
    abbreviation: d
  hour:
    singular: time
    plural: timer
    abbreviation: h
  minute:
    singular: minut
    plural: minutter
    abbreviation: m
  second:
    singular: sekund
    plural: sekunder
    abbreviation: s
  and: og
```

{% endcode %}


# Messages

{% code title="messages.yml" %}

```yaml
no-permission: '&8[&cCeller&8] &7Du har ikke adgang til denne kommando.'
player-only-cmd: '&8[&cCeller&8] &7Denne kommando er player-only.'
errors:
  unknown: '&8[&cCeller&8] &7Der skete en fejl med fejlkoden: &c{0}'
  alphanumeric: '&8[&cCeller&8] &7{0} kan kun indeholde bogstaver og tal.'
  numeric: '&8[&cCeller&8] &7Indtast venligst et tal.'
  plugin-not-found: '&8[&cCeller&8] &7Pluginet &c{0} &7blev ikke fundet.'
  cell-not-found: '&8[&cCeller&8] &7Ingen celle fundet med navnet&8: &c{0}'
  group-not-found: '&8[&cCeller&8] &7Ingen gruppe fundet med navnet&8: &c{0}'
  cell-location-not-found: '&8[&cCeller&8] &7Ingen lokation fundet for cellen&8: &c{0}'
  group-location-not-found: '&8[&cCeller&8] &7Intet skilt fundet for gruppen&8: &c{0}'
  already-being-edited: '&8[&cCeller&8] &7Denne &c{0} &7er allerede igang med at blive ændret.'
  player-not-online: '&8[&cCeller&8] &7Spillere &c{0}&7 er ikke online.'
  player-not-found: '&8[&cCeller&8] &7Ingen spiller fundet med navnet&8: &c{0}'
  command-on-cooldown: '&8[&cCeller&8] &7Du kan bruge kommandoen igen om&8: &c{0}'
success:
  teleport-cell: '&8[&aCeller&8] &7Du blev teleporteret til cellen&8: &a{0}'
  teleport-group: '&8[&aCeller&8] &7Du blev teleporteret til ''ledige'' skilt for gruppen&8: &a{0}'
  created-group: '&8[&aCeller&8] &7Gruppen &a{0}&7 er blevet lavet.'
  group-deleted: '&8[&aCeller&8] &7Gruppen &a{0}&7 er blevet slettet.'
  cell-forcesold: '&8[&aCeller&8] &7Cellen &a{0}&7 er blevet solgt.'
keywords:
  a-cell-name: "Et celle-navn"
  a-cell: 'En celle'
  cell: 'Celle'
  a-group-name: "Et gruppe-navn"
  a-group: 'En gruppe'
  group: 'Gruppe'
unrent:
  expired: '&8[&cCeller&8] &7Din celle er udløbet.'
  sold: '&8[&cCeller&8] &7Du har solgt din celle.'
  forcesold: '&8[&cCeller&8] &7Din celle er blevet solgt.'
  deleted: '&8[&cCeller&8] &7Din celle er blevet slettet.'
sign:
  no-more: "&lOg ikke flere"
  more: "&lOg {0} flere"
info:
  rented:
    - '&8&m----------&7 &aCELLE &8&m----------'
    - '&aEjer: &7{0}'
    - '&aTid tilbage: &7{1}'
    - '&aCelle: &7{2}'
    - '&aBlok: &7{3}'
    - '&aMedlemmere: &7{4}'
    - '&8&m----------&7 &aCELLE &8&m----------'
  available: '&8[&aCeller&8] &7Denne celle er ledig.'
  find:
    found-none:
      - '&8[&cCeller&8] &c{0}&7 ejer og er ikke tilføjet til nogen celle.'
    found-cells:
      - '&8[&aCeller&8] &a{0}&7 ejer cellerne&8: &a{1}'
    found-added:
      - '&8[&aCeller&8] &a{0}&7 er tilføjet til cellerne&8: &a{1}'
    found-both:
      - '&8&m----------&7 &aMEDLEM &8&m----------'
      - '&aNavn: &7{0}'
      - '&aEjer: &7{1}'
      - '&aTilføjet: &7{2}'
      - '&8&m----------&7 &aMEDLEM &8&m----------'
help:
  admin:
    top: '&8&m----------&7 &aADMIN KOMMANDOER &8&m----------'
    bottom: ''
    cmds:
      reload:
        help: '&a/cea reload &8- &7For at reload pluginet.'
        hover:
          - '&a/cea reload'
          - '&7Reloader config.yml og messages.DA.yml'
      admin:
        help: '&a/cea admin &8- &7For at åbne admin panelet.'
        hover:
          - '&a/cea admin <celle>'
          - '&7Åbner admin panelet, gives der et'
          - '&7celle som argument åbnes admin panelet,'
          - '&7for den celle.'
      create:
        help: '&a/cea create <celle> &8- &7For at lave ny celle.'
        hover:
          - '&a/cea create <celle>'
          - '&7Laver en ny celle, du kan tilføje et'
          - '&72. argument, som er gruppen, som cellen,'
          - '&7skal tilføjes til.'
      delete:
        help: '&a/cea delete <celle> &8- &7For at slette en celle.'
        hover:
          - '&a/cea delete <celle>'
          - '&7Sletter en celle'
      edit:
        help: '&a/cea edit <celle> &8- &7Åbner celle panelet.'
        hover:
          - '&a/cea edit <celle>'
          - '&7Åbner celle panelet for en celle.'
      teleport:
        help: '&a/cea tp <celle> &8- &7Teleporter til celle.'
        hover:
          - '&a/cea tp <celle>'
          - '&7Teleportere til celle.'
      setlocation:
        help: '&a/cea setloc <celle> &8- &7Sætter teleport lokationen.'
        hover:
          - '&a/cea setloc <celle>'
          - '&7Sætter teleport lokationen.'
      setsign:
        help: '&a/cea setsign <celle> &8- &7Sætter cellens skilt.'
        hover:
          - '&a/cea setsign <celle>'
          - '&7Sætter cellens skilt.'
      find:
        help: '&a/cea find <spiller> &8- &7Finder data om en spiller.'
        hover:
          - '&a/cea find <spiller>'
          - '&7Finder data om en spiller.'
  normal:
    top: '&8&m----------&7 &aCELLE KOMMANDOER &8&m----------'
    bottom: ''
    cmds:
      add:
        help: '&a/ce add <spiller> &8- &7For at tilføje medlemmer til din celle.'
        hover:
          - '&a/ce add <spiller>'
          - '&7Tilføjer en spiller til en af dine celler,'
          - '&7har du flere, vil du blive bedt om at angive,'
          - '&7hvilken celle, spilleren skal tilføjes til.'
      remove:
        help: '&a/ce remove <spiller> &8- &7For at fjerne medlemmer fra din celle.'
        hover:
          - '&a/ce remove <spiller>'
          - '&7Fjerner en spiller fra din celle,'
          - '&7har du flere, vil du blive bedt om at angive,'
          - '&7hvilken celle, spilleren skal fjernes fra.'
      info:
        help: '&a/ce info <celle/spiller> &8- &7For at få info om en celle/spiller'
        hover:
          - '&a/ce info <celle/spiller>'
          - '&7For at få info om en celle/spiller'
commands:
  reload:
    starting: '&8[&aCeller&8] &7Starter reload af Cells pluginet.'
    error: '&8[&cCeller&8] &7Der skete en fejl under reloaden.'
    success: '&8[&aCeller&8] &7Cells pluginet blev succesfuldt reloadet.'
  create:
    usage: '&8[&aCeller&8] &7Brug&8: &a/cea create <celle>'
    cell-already-exists: '&8[&cCeller&8] &7Cellen &a{0} &7findes allerede.'
    group-already-exists: '&8[&cCeller&8] &7Gruppen &a{0} &7findes allerede.'
    no-we-selection: '&8[&cCeller&8] &7Du har ingen WorldEdit selektion.'
    only-cuboid-selections: '&8[&cCeller&8] &7Celle regionen skal være kasseformet.'
    region-same-world: '&8[&cCeller&8] &7Din selektion er i 2 forskellige verdener.'
    cell-created: '&8[&aCeller&8] &7Cellen &a{0}&7 er blevet lavet, i gruppen &a{1}'
  delete:
    usage: '&8[&aCeller&8] &7Brug&8: &a/cea delete <celle>'
    cell-deleted: '&8[&aCeller&8] &7Cellen &a{0}&7 er blevet slettet.'
  edit:
    usage: '&8[&aCeller&8] &7Brug&8: &a/cea edit <celle>'
  teleport:
    usage: '&8[&aCeller&8] &7Brug&8: &a/cea tp <celle>'
  setlocation:
    usage: '&8[&aCeller&8] &7Brug&8: &a/cea setloc <celle>'
    location-changed: '&8[&aCeller&8] &7Du har sat lokationen for cellen&8: &a{0}'
  setsign:
    usage: '&8[&aCeller&8] &7Brug&8: &a/cea setsign <celle>'
    not-a-sign: '&8[&cCeller&8] &7Kig venligst på et skilt.'
    sign-changed: '&8[&aCeller&8] &7Du har sat skiltet for cellen&8: &a{0}'


  add:
    usage: '&8[&aCeller&8] &7Brug&8: &a/ce add <spiller>'
    no-cells: '&8[&cCeller&8] &7Du ejer ingen celle.'
    choose-cell:
      - '&8[&aCeller&8] &7Du ejer flere celler.'
      - '&8[&aCeller&8] &7Brug&8: &a/ce add <spiller> <celle>'
    max-members-reached: '&8[&cCeller&8] &7Der er ikke plads til flere medlemmer i cellen.'
    already-member: '&8[&cCeller&8] &c{0}&7 er allerede tilføjet til cellen.'
    member-added: '&8[&aCeller&8] &7Du har tilføjet &a{0}&7 til cellen.'
  remove:
    usage: '&8[&aCeller&8] &7Brug&8: &a/ce remove <spiller>'
    no-cells: '&8[&cCeller&8] &7Du ejer ingen celle.'
    choose-cell:
      - '&8[&aCeller&8] &7Du ejer flere celler.'
      - '&8[&aCeller&8] &7Brug&8: &a/ce remove <spiller> <celle>'
    not-member: '&8[&cCeller&8] &c{0}&7 er ikke tilføjet til cellen.'
    member-removed: '&8[&aCeller&8] &7Du har fjernet &a{0}&7 fra cellen.'
  info:
    no-cells: '&8[&cCeller&8] &7Du ejer ingen celle.'
    other-multiple-cells:
      - '&8[&aCeller&8] &a{0}&7 ejer cellerne&8: &a{1}'
      - '&8[&aCeller&8] &7Brug&8: &a/ce info <celle>'
    own-multiple-cells:
      - '&8[&aCeller&8] &7Du ejer cellerne&8: &a{0}'
      - '&8[&aCeller&8] &7Brug&8: &a/ce info <celle>'
events:
  add-duration:
    cant-afford: '&8[&cCeller&8] &7Du har ikke råd til at tilføje dage.'
    max-duration: '&8[&cCeller&8] &7Du kan ikke tilføje mere end &c{0} dage.'
    success: '&8[&aCeller&8] &7Du har tilføjet &a1 dag&7 for &a${0}'
  buy-cell:
    cant-afford: '&8[&cCeller&8] &7Du har ikke råd til denne celle.'
    no-permission: '&8[&cCeller&8] &7Du har ikke adgang til at leje denne celle.'
    max-cells: '&8[&cCeller&8] &7Du kan ikke leje flere celler.'
    success: '&8[&aCeller&8] &7Du har købt cellen &a{0} for &a${1}'
    cooldown: '&8[&cCeller&8] &7Du kan først købe en ny celle om&8: &c{0}'
  cellgroup-sign-placed:
    success: "&8[&aCeller&8] &7Du har sat 'ledige' skilt for gruppen&8 &a{0}"
    error: '&8[&cCeller&8] &7Der skete en fejl.'
```

{% endcode %}


# Java Docs

Du kan finde pluginet's Java Docs på: <http://docs.plexhost.dk/prisoncells/>


# ItemFlip

<figure><img src="/files/LkgqSA1Qj2UhsRQKyf8i" alt=""><figcaption></figcaption></figure>

{% embed url="<https://youtu.be/4WFZFuX18Uc>" %}

## Beskrivelse <a href="#description" id="description"></a>

**ItemFlip** er den perfekte løsning til dig, der ønsker et godt og veltestet ItemFlip system, som man ser på de store servere.

## Features

* Konfigurabelt design
* MySQL Support
* Admin kommandoer
* Nemt at bruge og opsætte
* <mark style="color:green;">**Det eneste på markedet!**</mark>

## Commands & Permissions

<table data-header-hidden><thead><tr><th width="169">Beskrivelse</th><th width="156">Command</th><th width="365.3333333333333">Permission</th></tr></thead><tbody><tr><td><strong>Command</strong></td><td><strong>Permission</strong></td><td><strong>Beskrivelse</strong></td></tr><tr><td>/itemflip </td><td>itemflip.open</td><td>Åbner ItemFlip menuen for spilleren.</td></tr><tr><td>/itemflip give</td><td>itemflip.give</td><td>Give Flip tokens til spillere.</td></tr><tr><td>/itemflip reload</td><td>itemflip.reload</td><td>Reloader ItemFlip konfigurationen.</td></tr></tbody></table>

{% hint style="warning" %}
For at kunne åbne menuen uden commands (med API), skal man stadig have permissionen **itemflip.use**
{% endhint %}

{% hint style="info" %}
Permissions **itemflip.\*** giver adgang til alt i pluginet.
{% endhint %}

## Dependencies

* [Vault](https://www.spigotmc.org/resources/vault.34315/)
* [PlexCore](https://plexhost.dk/plugins) (minimum v3.7)
* [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/) (valgfrit)
* En MySQL Database (bliver fjernet når SQLite bliver opsat :thumbsup:)

## Links

* Java Docs: [https://docs.plexhost.dk/itemflip/](https://docs.plexhost.dk/prisoncells)
* McSkripts: <https://mcskripts.net/view/id/5750>


# Installation

* **Stop** din server.
* Put **ItemFlip.jar** filen ind i din **/plugins** mappen.
* Download alle [**dependencies**](/plugins/itemflip#dependencies).
* **Start** din server.
* **Opsæt** databasen & **indsæt** licensnøgle i **config.yml**
* **Genstart** din server.


# Konfiguration


# Config

{% code title="config.yml" %}

```yaml
# License Key
license: Your License Key

# Hvor mange Flip tokens man får pr. diamond
tokens-per-diamond: 5

# MySQL Support
mysql:
  enabled: false
  hostname: localhost
  port: 3306
  database: database
  username: username
  password: password
  use_ssl: false
```

{% endcode %}


# Messages

{% code title="messages.yml" %}

```yaml
errors:
  no-permission: "&8[&4ItemFlip&8] &7Du har ikke adgang til dette."
  error-occurred: "&8[&4ItemFlip&8] &7Der skete en fejl. Prøv venligst igen!"
  not-loaded: "&8[&4ItemFlip&8] &7Pluginet er ikke loadet færdigt endnu. Vent venligst!"
  player-only: "&8[&4ItemFlip&8] &7Du skal være en spiller for at kunne bruge denne kommando!"
  player-not-found: "&8[&4ItemFlip&8] &7Spilleren &f{0} &7er ikke online."
  invalid-number: "&8[&4ItemFlip&8] &7Antallet &f{0} &7er ikke et tal."
bets:
  accept-error: "&8[&4ItemFlip&8] &7Modbuddet er blevet slettet. Vælg et andet."
  deny-bet:
    deleted-error: "&8[&4ItemFlip&8] &7Modbuddet er allerede blevet slettet."
    bet-got-denied: "&8[&cItemFlip&8] &c{0} &7har afvist dit modbud."
    you-denied-bet: "&8[&cItemFlip&8] &7Du har afvist &c{0}'s &7modbud."
  delete-bet:
    flip-deleted: "&8[&4ItemFlip&8] &7Flippet er allerede slettet og du har fået dine items igen."
    bet-deleted: "&8[&4ItemFlip&8] &7Dit modbud er blevet slettet."
    already-deleted: "&8[&4ItemFlip&8] &7Dette bud er allerede blevet slettet."
  create-bet:
    created: "&8[&aItemFlip&8] &7Du har nu oprettet et nyt modbud til &f{0}"
    no-items: "&8[&4ItemFlip&8] &7Du skal have mindst 1 item i dit modbud!"
    received-bet: "&8[&aItemFlip&8] &a{0} &7har oprettet et modbud på dit flip!"
    already-created: "&8[&aItemFlip&8] &7Du har allerede et modbud på dette flip!"
    invalid-items:
      start: "&8[&4ItemFlip&8] &7Du kan ikke oprette modbud med&8:"
      each-item: "&8- &c{0}"
flips:
  create-flip:
    created: "&8[&aItemFlip&8] &7Du har nu oprettet et nyt flip!"
    no-items: "&8[&4ItemFlip&8] &7Du skal have mindst 1 item i dit flip!"
    no-flip-tokens: "&8[&4ItemFlip&8] &7Du har ingen flip tokens."
    invalid-items:
      start: "&8[&4ItemFlip&8] &7Du kan ikke oprette flip med&8:"
      each-item: "&8- &c{0}"
  deletex  -flip: "&8[&aItemFlip&8] &7Du har slettet dit flip. Dine items kan claimes i menuen."
  already-deleted: "&8[&4ItemFlip&8] &7Dette flip er blevet slettet eller taget."
results:
  error-flip: "&8[&4ItemFlip&8] &7Der skete en fejl med at load flippet. Prøv venligst igen!"
  error-bet: "&8[&4ItemFlip&8] &7Der skete en fejl med at load modbuddet. Prøv venligst igen!"
spin:
  win: "&8[&aItemFlip&8] &7Du har vundet et flip over &a{0}"
  loss: "&8[&cItemFlip&8] &7Du har tabt et flip til &c{0}"
tokens:
  success: "&8[&aItemFlip&8] &7Du har købt &f{0} flip tokens &7for &d1 diamond."
  no-item: "&8[&4ItemFlip&8] &7Du har ikke nok diamanter."
commands:
  give:
    usage: "&8[&4ItemFlip&8] &7Korrekt brug&8: &f/itemflip give <spiller> <antal>"
    tokens-given: "&8[&2ItemFlip&8] &7Du har givet &f{0} &7{1} &7flip tokens."
    tokens-received: "&8[&2ItemFlip&8] &7Du har modtaget &f{0} &7flip tokens."
  reload:
    start: "&8[&aItemFlip&8] &7Reloader pluginet..."
    error: "&8[&4ItemFlip&8] &7Der skete en fejl med at reload pluginet. Prøv venligst igen!"
    success: "&8[&aItemFlip&8] &7Reload er gennemført."
```

{% endcode %}


# Item Aliases

Dette er hvordan items tolkes i pluginet / menuerne. Normalt har fx. glas kun 1 navn, men man kan via denne fil angive hvad det skal hedde, når det har et bestemt data value.\
\
Selve strukturen hedder: `MATERIAL:DATA: Dit Item Alias her.`

{% code title="item-aliases.yml" overflow="wrap" %}

```yaml
STAINED_GLASS_PANE:0: White Stained Glass Pane
STAINED_GLASS_PANE:1: Orange Stained Glass Pane
STAINED_GLASS_PANE:2: Magenta Stained Glass Pane
STAINED_GLASS_PANE:3: Light Blue Stained Glass Pane
STAINED_GLASS_PANE:4: Yellow Stained Glass Pane
STAINED_GLASS_PANE:5: Lime Stained Glass Pane
STAINED_GLASS_PANE:6: Pink Stained Glass Pane
STAINED_GLASS_PANE:7: Gray Stained Glass Pane
STAINED_GLASS_PANE:8: Light Gray Stained Glass Pane
STAINED_GLASS_PANE:9: Cyan Stained Glass Pane
STAINED_GLASS_PANE:10: Purple Stained Glass Pane
STAINED_GLASS_PANE:11: Blue Stained Glass Pane
STAINED_GLASS_PANE:12: Brown Stained Glass Pane
STAINED_GLASS_PANE:13: Green Stained Glass Pane
STAINED_GLASS_PANE:14: Red Stained Glass Pane
STAINED_GLASS_PANE:15: Black Stained Glass Pane
YELLOW_FLOWER:0: Dandelion
RED_ROSE:0: Poppy
RED_ROSE:1: Blue Orchid
RED_ROSE:2: Allium
RED_ROSE:3: Azure Bluet
RED_ROSE:4: Red Tulip
RED_ROSE:5: Orange Tulip
RED_ROSE:6: White Tulip
RED_ROSE:7: Pink Tulip
RED_ROSE:8: Oxeye Daisy
DOUBLE_PLANT:0: Sunflower
DOUBLE_PLANT:1: Lilac
DOUBLE_PLANT:2: Double Tallgrass
DOUBLE_PLANT:3: Large Fern
DOUBLE_PLANT:4: Rose Bush
DOUBLE_PLANT:5: Peony
SAPLING:0: Oak Sapling
SAPLING:1: Spruce Sapling
SAPLING:2: Birch Sapling
SAPLING:3: Jungle Sapling
SAPLING:4: Acacia Sapling
SAPLING:5: Dark Oak Sapling
LOG:0: Oak Log
LOG:1: Spruce Log
LOG:2: Birch Log
LOG:3: Jungle Log
LOG_2:0: Acacia Log
LOG_2:1: Dark Oak Log
LEAVES:0: Oak Leaves
LEAVES:1: Spruce Leaves
LEAVES:2: Birch Leaves
LEAVES:3: Jungle Leaves
LEAVES_2:0: Acacia Leaves
LEAVES_2:1: Dark Oak Leaves
LONG_GRASS:0: Dead Shrub
LONG_GRASS:1: Grass
LONG_GRASS:2: Fern
STONE_SLAB:0: Stone Slab
STONE_SLAB:1: Sandstone Slab
STONE_SLAB:3: Cobblestone Slab
STONE_SLAB:4: Brick Slab
STONE_SLAB:5: Stone Brick Slab
STONE_SLAB:6: Nether Brick Slab
STONE_SLAB:7: Quartz Slab
STONE_SLAB2:0: Red Sandstone Slab
WOOD_STEP:0: Oak Wood Slab
WOOD_STEP:1: Spruce Wood Slab
WOOD_STEP:2: Birch Wood Slab
WOOD_STEP:3: Jungle Wood Slab
WOOD_STEP:4: Acacia Wood Slab
WOOD_STEP:5: Dark Oak Wood Slab
WOOL:0: White Wool
WOOL:1: Orange Wool
WOOL:2: Magenta Wool
WOOL:3: Light Blue Wool
WOOL:4: Yellow Wool
WOOL:5: Lime Wool
WOOL:6: Pink Wool
WOOL:7: Gray Wool
WOOL:8: Light Gray Wool
WOOL:9: Cyan Wool
WOOL:10: Purple Wool
WOOL:11: Blue Wool
WOOL:12: Brown Wool
WOOL:13: Green Wool
WOOL:14: Red Wool
WOOL:15: Black Wool
CARPET:0: White Carpet
CARPET:1: Orange Carpet
CARPET:2: Magenta Carpet
CARPET:3: Light Blue Carpet
CARPET:4: Yellow Carpet
CARPET:5: Lime Carpet
CARPET:6: Pink Carpet
CARPET:7: Gray Carpet
CARPET:8: Light Gray Carpet
CARPET:9: Cyan Carpet
CARPET:10: Purple Carpet
CARPET:11: Blue Carpet
CARPET:12: Brown Carpet
CARPET:13: Green Carpet
CARPET:14: Red Carpet
CARPET:15: Black Carpet
STAINED_CLAY:0: White Stained Clay
STAINED_CLAY:1: Orange Stained Clay
STAINED_CLAY:2: Magenta Stained Clay
STAINED_CLAY:3: Light Blue Stained Clay
STAINED_CLAY:4: Yellow Stained Clay
STAINED_CLAY:5: Lime Stained Clay
STAINED_CLAY:6: Pink Stained Clay
STAINED_CLAY:7: Gray Stained Clay
STAINED_CLAY:8: Light Gray Stained Clay
STAINED_CLAY:9: Cyan Stained Clay
STAINED_CLAY:10: Purple Stained Clay
STAINED_CLAY:11: Blue Stained Clay
STAINED_CLAY:12: Brown Stained Clay
STAINED_CLAY:13: Green Stained Clay
STAINED_CLAY:14: Red Stained Clay
STAINED_CLAY:15: Black Stained Clay
STAINED_GLASS:0: White Stained Glass
STAINED_GLASS:1: Orange Stained Glass
STAINED_GLASS:2: Magenta Stained Glass
STAINED_GLASS:3: Light Blue Stained Glass
STAINED_GLASS:4: Yellow Stained Glass
STAINED_GLASS:5: Lime Stained Glass
STAINED_GLASS:6: Pink Stained Glass
STAINED_GLASS:7: Gray Stained Glass
STAINED_GLASS:8: Light Gray Stained Glass
STAINED_GLASS:9: Cyan Stained Glass
STAINED_GLASS:10: Purple Stained Glass
STAINED_GLASS:11: Blue Stained Glass
STAINED_GLASS:12: Brown Stained Glass
STAINED_GLASS:13: Green Stained Glass
STAINED_GLASS:14: Red Stained Glass
STAINED_GLASS:15: Black Stained Glass

```

{% endcode %}


# Citizens integration

Dette kræver Skript-Reflect

{% hint style="info" %}
Husk at spilleren stadig skal have **itemflip.use** for at bruge menuen.
{% endhint %}

```vbnet
import:
  dk.plexhost.itemflip.userinterface.UIOptions
  dk.plexhost.itemflip.ItemFlipPlugin

rightclick on entity:
  if citizen id of event-entity = id på din npc:
    ItemFlipPlugin.getInstance().getUIManager().openGui(player, "start", new UIOptions())
```


# Java Docs

Du kan finde pluginet's Java Docs på: <https://docs.plexhost.dk/itemflip>


# End Crates

<figure><img src="/files/qiU8wfMFMzk3nUmJNpFY" alt=""><figcaption></figcaption></figure>

{% embed url="<https://youtu.be/d5PQGa4G9vU>" %}

## Beskrivelse <a href="#description" id="description"></a>

**End Crates** er et nemt-at-bruge crate plugin, som giver dine spillere mulighed for at prøve en limited crate. Det er nemt at konfigurere, så selv en serverejer uden specielt meget erfaring kan sætte det op.

## Features

* Konfigurabelt design
* Admin kommandoer
* Nemt at bruge og opsætte

## Commands & Permissions

<table data-header-hidden><thead><tr><th width="169">Beskrivelse</th><th width="176">Command</th><th width="365.3333333333333">Permission</th></tr></thead><tbody><tr><td><strong>Command</strong></td><td><strong>Permission</strong></td><td><strong>Beskrivelse</strong></td></tr><tr><td>/endcrates</td><td>endcrates.admin</td><td>Admin kommando for pluginet.</td></tr></tbody></table>

## Dependencies

* [PlexCore](https://plexhost.dk/plugins) (minimum v3.7)

## Links

* McSkripts: <https://mcskripts.net/view/id/5751>


# Installation

* **Stop** din server.
* Put **EndCrates.jar** filen ind i din **/plugins** mappen.
* Download alle [**dependencies**](/plugins/end-crates#dependencies).
* **Start** din server.
* **Indsæt** licensnøgle i **config.yml**
* **Genstart** din server.


# Konfiguration


# Config

{% code title="config.yml" %}

```yaml
license: your license key here
use-metadata-for-key: false
```

{% endcode %}


# Messages

{% code title="messages.yml" %}

```yaml
preview:
  title: "&2&lEndCrate"
  prize-lore:
    - "&7Chance&8: &a{0}%"
reward-hologram:
  title: "&2&l&nEnd Crate"
commands:
  help:
    - '&8[&aEndCrates&8] &7Commands&8:'
    - '&8 » &a/endcrate givecrate <crate>'
    - '&8 » &a/endcrate givekey <player> <crate> [<antal>]'
    - '&8 » &a/endcrate reload'
  givekey:
    usage: "&8[&aEndCrates&8] &7Korrekt brug&8: &f/endcrate givekey <player> <crate> [<antal>]"
    success: "&8[&aEndCrates&8] &7Du har givet &f{2}x {1} &7til &a{0}"
  givecrate:
    usage: "&8[&aEndCrates&8] &7Korrekt brug&8: &f/endcrate givecrate <crate>"
    success:
      - "&8[&aEndCrates&8] &7Du har givet dig selv en &f{0} &7crate."
      - "&8[&aEndCrates&8] &7Placer den for at man kan åbne den."
  reload:
    start: "&8[&aEndCrates&8] &7Reloader pluginet"
    success: "&8[&aEndCrates&8] &aReload gennemført."
    failed: "&8[&cEndCrates&8] &cReload fejlede. Tjek venligst konsolen."
events:
  crate-place:
    crate-no-exist: "&8[&cEndCrates&8] &cCraten &f{0} &cfindes ikke længere."
    crate-placed: "&8[&aEndCrates&8] &aDu har placeret en &f{0} &acrate!"
  crate-break:
    sneak: "&8[&cEndCrates&8] &7Du skal sneake for at fjerne craten."
    crate-removed: "&8[&aEndCrates&8] &aDu har fjernet en crate!"

player-only: "&8[&cEndCrates&8] &cDu skal være en spiller for at bruge denne kommando."
no-permission: "&8[&cEndCrates&8] &cDu har ikke adgang til denne kommando."
crate-not-found: "&8[&cEndCrates&8] &cCraten &f{0} &cblev ikke fundet."
invalid-amount: "&8[&cEndCrates&8] &cUgyldigt antal&8: &f{0}"
player-not-found: "&8[&cEndCrates&8] &cSpilleren &f{0} &cblev ikke fundet."
no-keys: "&8[&cEndCrates&8] &cDu har ikke nogen nøgler til denne crate."
crate-already-opened: "&8[&cEndCrates&8] &cDenne crate er allerede igang med at blive åbnet."
```

{% endcode %}


# Discord Link

<figure><img src="/files/5EKLRfVFRdgYSoRtVpZ7" alt=""><figcaption></figcaption></figure>

## Beskrivelse <a href="#description" id="description"></a>

**Discord Link er et plug-n-play verifikations system som gør det muligt for dig som server ejer at sikre at din discord server ikke bliver spammet med bots.** Det er nemt at konfigurere, så selv en serverejer uden specielt meget erfaring kan sætte det op.

## Features

* Konfigurabelt design
* Database Support
* Nemt at bruge og opsætte
* Virker på Bungeecord & Spigot

## Commands & Permissions

<table data-header-hidden><thead><tr><th width="169">Beskrivelse</th><th width="176">Command</th><th width="365.3333333333333">Permission</th></tr></thead><tbody><tr><td><strong>Command</strong></td><td><strong>Permission</strong></td><td><strong>Beskrivelse</strong></td></tr><tr><td>/discord</td><td></td><td>Viser en besked</td></tr><tr><td>/discord link</td><td></td><td>Starter linking processen</td></tr><tr><td>/discord unlink</td><td></td><td>Unlinker ens bruger.</td></tr><tr><td>/discord reload</td><td>discordlink.reload</td><td>*Virker kun på Spigot*</td></tr></tbody></table>


# Installation

* **Stop** din server.

* Put **DiscordLink.jar** filen ind i din **/plugins** mappen.

* **Start** din server.

* **Indsæt** licensnøgle i **config.yml**

* **Opret en bot på** [**https://discord.com/developers/applications**](https://discord.com/developers/applications)

  *

  ```
  <figure><img src="/files/hZjDLELqkHvmq6mgBoGK" alt=""><figcaption><p>Opret Application på Discord</p></figcaption></figure>
  ```

  ```
  <figure><img src="/files/IoVy9aqGgza9adWHXjRC" alt=""><figcaption><p>Sørg for at aktivere "Message Content Intent"<br></p></figcaption></figure>

  <figure><img src="/files/4UouLMwk9ra1xg20UXZv" alt=""><figcaption><p>Botten skal have disse scopes - særlig "applications.commands" er vigtigt!</p></figcaption></figure>



  <figure><img src="/files/wlWi5VZU9CexbtBHir0n" alt=""><figcaption><p>Disse permissions skal botten mindst have.</p></figcaption></figure>
  ```

* Udfyld \`config.yml\` med de nødvendige oplysninger.

* **Genstart** din server.

{% hint style="info" %}
Bemærk det godt kan tage op til 10 minutter før Discord har registeret de nye slash commands.
{% endhint %}


# Konfiguration


# Config

{% code title="config.yml" %}

```yaml
license: license key
token: discord bot token
guild: guild id
channel: channel id (der kan ikke skrives beskeder i denne kanal)
mysql:
  enabled: false
  host: localhost
  port: 3306
  database: bungee
  username: root
  password: password
  use_ssl: false
roles:
  verified: id of the verified role
```

{% endcode %}


# Messages

{% code title="messages.yml" %}

```yaml
discord-command:
  - '&r &f&m---------------&r &8&l●&r &f&m---------------&r &r'
  - ''
  - ' &7            &2&lVores discord'
  - ' &7            discord.example.com'
  - ''
  - '&7       &oVerificer dig via &b@ /discord link'
  - ''
  - '&r &f&m--------------------------------&r'
cooldown: '&8&l┃ &2&lDiscord &8&l┃ &7Vent venligst et par sekunder, før du prøver igen.'
already-linked: '&8&l┃ &2&lDiscord &8&l┃ &7Du har allerede linket din discord profil.'
linking:
  - '&8&l┃ &2&lDiscord &8&l┃ &7Din kode&8: &f{0}'
  - '&8&l┃ &2&lDiscord &8&l┃ &7Brug&8: &f/link <kode> &7på vores discord.'
not-linked: '&8&l┃ &2&lDiscord &8&l┃ &7Du har ikke linket din discord profil.'
unlinked: '&8&l┃ &2&lDiscord &8&l┃ &7Du har nu unlinket din discord profil.'
linked-to: '&8&l┃ &2&lDiscord &8&l┃ &7Du er blevet linket til &a{0}&7.'
no-permission: '&8&l┃ &2&lDiscord &8&l┃ &7Du har ikke tilladelse til at bruge denne kommando.'
reloaded: '&8&l┃ &2&lDiscord &8&l┃ &7Konfigurationen er blevet genindlæst.'





























```

{% endcode %}


# Quests

<figure><img src="/files/9rlR0u0GKG5zKxQIXCRc" alt=""><figcaption></figcaption></figure>

## Beskrivelse <a href="#description" id="description"></a>

**Quests er et nemt konfigurerbart missions plugin til hurtigt at lave unikke missioner. Det er nemt at sætte op og fungerer super lækkert!**

## Features

* Indbygget GUI system.
* Quest cooldowns.
* 9+ events
* Opret så mange quest menuer som du vil!
* MongoDB support!

## Permissions

<table data-header-hidden><thead><tr><th width="200.32856419721702">Beskrivelse</th><th width="150">Command</th><th width="249.33333333333331">Permission</th></tr></thead><tbody><tr><td><strong>Command</strong></td><td><strong>Permission</strong></td><td><strong>Beskrivelse</strong></td></tr><tr><td>/quests</td><td>quests.admin</td><td>Viser hjælp beskeden.</td></tr><tr><td>/quest open [MENU]</td><td>quests.admin</td><td>Åben en quest menu.</td></tr><tr><td>/quest reload</td><td>quests.admin</td><td>Reloader konfigurationen og quests</td></tr><tr><td>/quest show [PLAYER] [MENU]</td><td>quests.admin</td><td>Åbner en quest menu for en anden spiller. (spilleren skal have permission til det)</td></tr></tbody></table>

{% hint style="info" %}
I hver quest menu kan den individuelle permission sættes for at åbne den.
{% endhint %}

## Dependencies

* [Vault](https://www.spigotmc.org/resources/vault.34315/)
* [PlexCore](https://plexhost.dk/plugins)


# Installation

1. **Stop** din server.
2. Put **Quests.jar** filen ind i din **/plugins** mappen.
3. Download alle [**dependencies**](/plugins/quests#dependencies).
4. **Start** din server.


# Konfiguration


# Config.yml

{% code title="config.yml" %}

```yaml
license: Your license key
save-time: 5 # Hvor ofte serveren gemmer data.
concurrentQuests: 3 # Hvor mange quests en spiller maksimalt kan have.
storage: # Hvordan skal dataen gemmes.
  type: YAML # YAML or MongoDB
  username: username
  password: password
  host: host
  port: 27017
  srv: false
```

{% endcode %}


# Messages.yml

{% hint style="info" %}
Alle beskeder bliver behandlet som en **List\<String>**, så du kan derfor lave flere linjer hvis du vil.
{% endhint %}

{% code title="messages.yml" %}

```yaml
user-not-loaded: "&8&l┃ &c&lQuests &8&l┃ &cDer skete en fejl. Data er ikke hentet endnu."
no-permission: "&8&l┃ &c&lQuests &8&l┃ &cDu har ikke adgang til denne kommando."
player-only: "&8&l┃ &c&lQuests &8&l┃ &cDenne kommando er player-only."
no-menu-access: "&8&l┃ &c&lQuests &8&l┃ &7Du har ikke adgang til denne menu."
menu-not-found: "&8&l┃ &c&lQuests &8&l┃ &cMenuen &f{0} &cblev ikke fundet."
commands:
  reload:
    start: "&8&l┃ &a&lQuests &8&l┃ &aStarter reload af Quests."
    error: "&8&l┃ &c&lQuests &8&l┃ &cDer skete en fejl under reload."
    success: "&8&l┃ &2&lQuests &8&l┃ &2Reload var succesfuld."
  help:
    - "&8&m===================================================="
    - "  &2&lQuests"
    - ""
    - "  &8&l» &f/quests help &8- &7Viser denne besked"
    - "  &8&l» &f/quests open &7[MENU] &8- &7Åbner en quest menu."
    - "  &8&l» &f/quests reload &8- &7Reload konfigurationen."
    - "  &8&l» &f/quests show &7[PLAYER] [MENU] &8- &7Åbner menu for spiller."
    - ""
    - "&8&m===================================================="
  show:
    usage: "&8&l┃ &c&lQuests &8&l┃ &7Korrekt brug&8: &f/quests show [PLAYER] [MENU]"
    player-not-found: "&8&l┃ &c&lQuests &8&l┃ &cSpilleren &f{0} &cblev ikke fundet."
mission:
  started: "&8&l┃ &a&lQuests &8&l┃ &7Du har startet questen &a{0}"
  cancelled: "&8&l┃ &c&lQuests &8&l┃ &7Du har annulleret questen &c{0}"
  concurrent-error: "&8&l┃ &c&lQuests &8&l┃ &7Du kan kun have &c{0} quests &7aktiveret på en gang."
  concurrent-menu-error: "&8&l┃ &c&lQuests &8&l┃ &7Du kan kun have &c{0} quests &7aktiveret fra denne menu."
  complete:
    message: "&8&l┃ &a&lQuests &8&l┃ &7Du har klaret questen &a{0}"
    title: "&a&lQuest Klaret!"
    subtitle: "&7Du har klaret en quest!"
```

{% endcode %}


# Quests (missioner)

{% hint style="info" %}
Alle quests skal oprettes i mappen \`/quests\`

Det er muligt at lave sub-folders derinde for at organisere sig.
{% endhint %}

## Quest Typer:

* `BLOCK_BREAK`
  * Smadre bestemt blok et bestemt antal gange&#x20;

    ```yaml
    type: BLOCK_BREAK
    variable: STONE # Material
    required: 128 # Antal
    ```
* `BLOCK_PLACE`
* `CHAT`
  * Skriv bestemt besked i chatten

    ```yaml
    type: CHAT
    variable: Quests er et Awesome Plugin! # Besked
    ```
* `CONSUME`
* `PLAYER_FISH`
* `NPC_CLICK` *(kræver Citizens)*
  * Find / Klik på en NPC

    ```yaml
    type: NPC_CLICK
    variable: 59 # id'et på NPC'en
    ```
  * Aflever items til NPC

    ```yaml
    type: NPC_CLICK
    variable: 59 # id'et på NPC'en
    extra-variable: ROTTEN_FLESH # Material
    required: 64 # Antal
    ```
* `REGION_ENTER` *(kræver WorldGuard)*
  * *Gå ind i bestemt region:*

    ```yaml
    type: REGION_ENTER
    variable: mines # The Region
    ```
* Opret en ticket for at få tilføjet flere events!

{% code title="quests/blockbreak.yml" lineNumbers="true" %}

```yaml
id: BlockPlaceExample
type: BLOCK_PLACE
variable: GLASS
required: 32 # default til 1
cooldown: 10000 # I antal sekunder
reward:
  commands:
    - "eco give {player} 560"
gui:
  title: "Placer - Example"
  material: GLASS
  description: "Placer 32x Glass"
  rewards:
    - " &8  - &a$560"
```

{% endcode %}


# Menu

{% hint style="info" %}
Alle quest menuer skal oprettes i mappen \`/menus\`

Det er muligt at lave sub-folders derinde for at organisere sig.
{% endhint %}

Alle quest menuer består af 3 dele:\
\- Indstillinger\
\* `max-activated-quests` afgør hvor mange quests fra denne menu som man kan have aktiveret på en gang.\
\* `permission` er den permission som en spiller skal have for at kunne åbne menuen.\
\
\- Gui ([læs mere om det her](/plugins/quests/menu/gui))\
\* `quests` her skal du skrive id'et på dine quests og det slot som du vil have de skal fremgå i menuen.\
\
\- Template:\
\* Du kan som udgangspunkt nøjes med at konfigurere `default-template.yml` for hvordan quest items skal fremgå i menuen - dog kan du også gøre dette på et individuelt plan i hver quest menu som vil override default template.

&#x20;

### **Eksempel på en quest menu.**

{% code title="menus/default.yml" lineNumbers="true" %}

```yaml
max-activited-quests: 3 # The maximum amount of quests a player can have activated at once from this menu.
permission: "quests.menu.default" # The permission required to open this menu.

gui:
  title: "Example Quests"
  rows: 1
  items:
    glass:
      material: STAINED_GLASS_PANE
      data: 15
      slots: [ 0, 1, 2, 3, 4, 5, 6, 7, 8]
  quests:
    BlockBreakExample: 2
    BlockPlaceExample: 3
    ChatExample: 4
    ConsumeExample: 5
    FindRegionExample: 6

template:
  completed:
    material: EMERALD_BLOCK
    title: "&a&lKlaret!"
    lore:
      - "&7Du har klaret denne mission."
  cooldown:
    material: COAL_BLOCK
    title: "&e&l{title}"
    lore:
      - "&7Du har klaret denne mission."
      - "&7Kom igen om&8: &f{cooldown}"
  activated:
    material: STONE # Can be overridden in the individual Mission Files.
    title: "&b&l{title}"
    enchanted: true
    lore:
      - "&8&l» &7Opgave&8: &a{quest}"
      - "&8&l» &7Belønninger&8:"
      - "{rewards}"
      - ""
      - "&8&l» &7Fremskridt&8: &a{progress}/{required}"
      - ""
      - "&aDenne mission er aktiveret."
      - "&8&l » &7Klik for at afbryde den."
  default:
    material: STONE # Can be overridden in the individual Mission Files.
    title: "&b&l{title}"
    lore:
      - "&8&l» &7Opgave&8: &a{quest}"
      - "&8&l» &7Belønninger&8:"
      - "{rewards}"
      - ""
      - "&8&l» &7Klik for at starte missionen."
```

{% endcode %}


# Gui

### GUI Layout

{% code title="default\_gui.yml" %}

```yaml
gui:
    id: default_gui
    title: '&a&lDefault GUI'
    rows: 5
    slots:
        disabled_slot:
            enabled: false # Defaulter til true, så ikke nødvendig at skrive.
            item:
                ....
        enabled_slot:
            item:
                ....
```

{% endcode %}

### Item Layout

{% code title="default\_gui.yml" %}

```yaml
gui:
    ...
    slots:
        head:
            item:
                name: '&l&lSejt Hovede?!'
                lore:
                - "Dette item har"
                - "en lore. OMG"
                material: SKULL
                value: "eeyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNGRjY2IyNmExYjc1NWFkMjZkYTgwNWE0NmZhMmVhYjVjMWZkYmY1ZDU3Njg3YzkxMGRlNTY3N2MyMDBlYmM2MyJ9fX0"
                enchanted: true
                slot: 29
        dye:
            item:
                name: '&l&lFarve'
                material: INK_SACK
                data: 7
                slot: 29
                
```

{% endcode %}


