# Dyroxplays' Plugin Wiki

Informationen & Dokumentation über alle Plugins von dyroxplays.de

👋 | Herzlich Willkommen in dem offiziellen Wiki von **Dyroxplays**! Hier sind unsere Plugins bis ins Detail beschrieben, sodass Dir die Einrichtung leichter fallen wird! \
\
Diese Wiki wird derzeit noch ausgebessert. Fehlende Plugins werden zeitnah hinzugefügt.

\
Bei Problemen & Fragen sind wir für Dich da und das mit einem direkten, sehr schnellen, qualitativen Support. engl\
<https://dyroxplays.de/support>\
Discord: @dyroxplays \
\
[Impressum ](https://dyroxplays.de/impressum)| [Datenschutz ](https://dyroxplays.de/datenschutzerklaerung)| [AGB](https://dyroxplays.de/agb)


# Allgemeine Informationen

Willkommen in der offiziellen Dokumentation der Spigot- und Paper-Plugins von **Dyroxplays**.

Um dir die Einrichtung deiner Server-Systeme so einfach wie möglich zu machen, verwenden fast alle unsere Plugins mit grafischen Benutzeroberflächen (GUIs) dieselbe interne Code-Logik zum Zeichnen von Inventaren: das **InventoryBuilder-System**.

***

## 🧰 Das InventoryBuilder-System (Menü-Design)

Der `InventoryBuilder` liest die Layout-Vorgaben deiner Konfigurationsdateien aus und erstellt daraus dynamisch die In-Game-Menüs. Wenn du dieses System einmal verstanden hast, kannst du die GUIs **aller** Plugins im Handumdrehen anpassen.

### 1. Platzhalter & Glasscheiben (`placeholder`)

Fast jedes Menü besitzt eine Sektion namens `placeholder`. Hier kannst du leere Slots mit farbigen Glasscheiben dekorieren, um ein einheitliches Design zu erzeugen.

```yaml
placeholder:
  enable: true
  # Format ab Version 1.13+: MATERIALNAME: "Slots"
  GRAY_STAINED_GLASS_PANE: "0-8,18-26"
  LIGHT_BLUE_STAINED_GLASS_PANE: "9,17"
```

#### So definierst du Slots und Slot-Bereiche:

* **Einzelne Slots:** Trenne verschiedene Slots mit Kommas (z. B. `"9,17,25"`).
* **Slot-Bereiche:** Verwende einen Bindestrich, um einen zusammenhängenden Bereich zu füllen (z. B. `"0-8"` füllt die gesamte erste Reihe einer Truhe).
* **Mischung:** Du kannst auch beides kombinieren (z. B. `"0-8,12,18-26"`).

***

### 2. Formatierung von Gegenständen (Items)

Wenn du Gegenstände in Menüs platzierst, kannst du deren Aussehen über bestimmte Parameter steuern.

#### Format für die 1.13 und neuere Versionen:

```yaml
# Materialnamen müssen zwingend in Großbuchstaben angegeben werden (z. B. DIAMOND, GOLD_INGOT, COAL_ORE)
material: STICK
name: '&eKnockback-Stick'
amount: 1
slot: 13
lore:
  - '&7Dieses Item dient als'
  - '&7Standard-Schlagwerkzeug.'
```

#### Format für die 1.8 bis 1.12.x:

In älteren Minecraft-Versionen, in denen Sub-IDs (z. B. für gefärbte Glasscheiben oder Wolle) verwendet werden, gibt es das Feld `shortid` (oder die Sub-ID wird mit einem Semikolon an das Material gehängt):

```yaml
material: WOOL
shortid: 14   # Ergibt Rote Wolle (ID 35:14)
# Alternative Schreibweise in einigen Listen:
# - "WOOL;14;1;100" (Material;ShortID;Menge;Chance)
```

***

### 3. Liste der Plugins mit InventoryBuilder-Unterstützung

Folgende Plugins nutzen dieses System für ihre Menüs und Hintergründe:

* ⚔️ **1vs1** (Lobby- & Kit-Auswahl)
* 🎄 **Adventskalender** (24-Tage-Kalenderblatt)
* 🧱 **BuildFFA** (Shop & Perk-Auswahl)
* 🛍️ **BuyPerms** (Berechtigungs-Shop)
* 🥇 **CaseOpening** (Kisten-Animationen & Gewinne)
* 🐎 **DailyQuests** (Quest-Übersicht & Abgabe)
* 💸 **DailyRewards** (Tägliche Belohnungs-Slots)
* Livesupport (Supportticket-Verwaltung)
* 🤑 **MoneyTopList** (Bestenlisten-Köpfe)
* ✨ **Perks** (Perk-Aktivierung GUI)
* 🎰 **PlotAuction** (Auktions-Menüs)
* ⭐ **Plotbewerten** (Sterne-Menü)
* 💣 **TNTRun** (Map-Voting & Spectator-Menüs)
* 🚧 **Trichtersystem** (Verbindungs- und Filter-GUI)


# Übersicht

{% content-ref url="/pages/NhKumDvjXk9JAgV7nRe7" %}
[1vs1](/1vs1/funktionen-and-setup-anleitung)
{% endcontent-ref %}

{% content-ref url="/pages/RxwaIQjFhJA2bVTSTtHE" %}
[Abstimmungen](/abstimmungen/funktionen-and-setup-anleitung)
{% endcontent-ref %}

{% content-ref url="/pages/okQlc8e8HRuVxPcphdZF" %}
[AdminShop](/adminshop/beschreibung)
{% endcontent-ref %}

{% content-ref url="/pages/ZuEG41alFQv13BZdDTH6" %}
[Adventskalender](/adventskalender/beschreibung)
{% endcontent-ref %}

{% content-ref url="/pages/MngELDSKpUtN6UAf6np0" %}
[Auction](/auction/funktionen-and-setup-anleitung)
{% endcontent-ref %}

{% content-ref url="/pages/tligg1v9QR8Awj208SuB" %}
[Ballon](/ballon/beschreibung)
{% endcontent-ref %}

{% content-ref url="/pages/BhFuCCUR5HDZRug6DcKB" %}
[BetterSpawner](/betterspawner/beschreibung)
{% endcontent-ref %}

{% content-ref url="/pages/IkaKkSwIMpPFeYpPGm11" %}
[BuildFFA](/buildffa/beschreibung-and-kit-infos)
{% endcontent-ref %}

{% content-ref url="/pages/CRNLRkoKUbjndCOFhZ2S" %}
[BuyPerms](/buyperms/beschreibung)
{% endcontent-ref %}


# Funktionen & Setup-Anleitung

Ein hochgradig anpassbares 1vs1-Duell-System mit automatischen, unlimitierten Arenen, Warteschlangen, Top-10-Wänden und vielem mehr!

{% hint style="success" %}
⚔️ **Biete deinen Spielern ein fesselndes Duell-Erlebnis ähnlich wie auf GommeHD.net!**
{% endhint %}

## Features

{% tabs %}
{% tab title="🎮 Gameplay & Arenen" %}

#### Gameplay-Features

* **Automatisches Arenensystem:** Arenen werden je nach Bedarf dynamisch instanziiert und gestartet.
* **Warteschlange (Queue):** Spieler können sich für bestimmte Kits in die Warteschlange einreihen.
* **Aufgeben-Funktion:** Schnelles Aufgeben via `/quit`.
* **Lebensanzeige:** Zeigt die verbleibenden HP über dem Spielernamen (deaktivierbar).
* **Anpassbares Scoreboard:** Integriertes Scoreboard für Duelle (deaktivierbar).
  {% endtab %}

{% tab title="⚙️ Administration" %}

#### Administrative Features

* **99% konfigurierbar:** Alle Nachrichten, Sounds, Titel und Scoreboards lassen sich anpassen.
* **Top 10 Statswand:** Zeigt die Top-Spieler sortiert nach Wins mit Köpfen und Schildern an.
* **MySQL-Integration:** Sichere und persistente Speicherung aller Spielerstatistiken.
* **PlaceholderAPI Support:** Voller Zugriff auf Platzhalter zur Verwendung in anderen Plugins.
  {% endtab %}
  {% endtabs %}

## Setup-Anleitung

{% hint style="warning" %}
**Wichtig:** Um das Setup durchzuführen, muss in der Konfiguration `setup: true` gesetzt sein!
{% endhint %}

{% stepper %}
{% step %}

#### Installation & erste Schritte

Lade die `.jar`-Datei in den `plugins`-Ordner deines Servers und starte diesen einmal, damit alle Konfigurationen generiert werden.
{% endstep %}

{% step %}

#### Lobby setzen

Betrete den Server und markiere den Spawn-Punkt der Haupt-Lobby mit: `/1vs1 setLobby` *(Erfordert die Permission `1vs1.admin`)*
{% endstep %}

{% step %}

#### Top 10 Statswand erstellen

Baue eine Wand mit einem Spielerkopf (oben) und einem Schild (darunter). Stelle dich auf den Block des Kopfes und führe aus: `/1vs1 settopwall <1-10>` (für die Ränge 1 bis 10).
{% endstep %}

{% step %}

#### Welten & Maps einrichten

1. Stoppe den Server.
2. Kopiere deine Duell-Welten (Maps) in den Ordner `/plugins/1vs1/saves`.
3. Trage deine MySQL-Verbindung in die `config.yml` ein.
4. Starte den Server neu. Die Welten aus `/saves` werden nun im Setup-Modus geladen.
   {% endstep %}

{% step %}

#### Arenen-Spawns setzen

1. Teleportiere dich mit `/1vs1 worldtp <weltname>` in deine Duell-Welten.
2. Setze dort die beiden Startpunkte für die Duellanten mit `/1vs1 setspawnpos <1/2>`.
   {% endstep %}

{% step %}

#### Setup abschließen

1. Öffne die `config.yml` und setze `setup: false`.
2. Starte den Server neu. Nun ist das System aktiv, und Spieler können die Warteschlangen nutzen!
   {% endstep %}
   {% endstepper %}

***

### Platzhalter (PlaceholderAPI)

<table><thead><tr><th width="250">Platzhalter</th><th>Beschreibung</th></tr></thead><tbody><tr><td><code>%1vs1_arena%</code></td><td>Gibt den Namen der aktuellen Arena aus.</td></tr><tr><td><code>%1vs1_vs%</code></td><td>Zeigt den Namen des aktuellen Gegners an.</td></tr><tr><td><code>%1vs1_wins%</code></td><td>Anzahl der Siege des Spielers.</td></tr><tr><td><code>%1vs1_deaths%</code></td><td>Anzahl der Tode des Spielers.</td></tr><tr><td><code>%1vs1_kills%</code></td><td>Anzahl der Kills des Spielers.</td></tr></tbody></table>

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="200">Permission</th></tr></thead><tbody><tr><td><code>/1vs1 setLobby</code></td><td>Setzt den Spawn für die Lobby.</td><td><code>1vs1.admin</code></td></tr><tr><td><code>/1vs1 setspawnpos &#x3C;1/2></code></td><td>Setzt den Spawn 1 oder 2 in einer Arena.</td><td><code>1vs1.admin</code></td></tr><tr><td><code>/1vs1 worldTP &#x3C;welt></code></td><td>Teleportiert dich im Setup in eine Arena-Welt.</td><td><code>1vs1.admin</code></td></tr><tr><td><code>/1vs1 saveKit &#x3C;0-8></code></td><td>Speichert dein aktuelles Inventar als Kit auf einem Slot.</td><td><code>1vs1.admin</code></td></tr><tr><td><code>/1vs1 settopwall &#x3C;1-10></code></td><td>Registriert ein Kopf/Schild-Paar für die Statswand.</td><td><code>1vs1.admin</code></td></tr><tr><td><code>/quit</code></td><td>Gibt den aktuellen Kampf vorzeitig auf.</td><td>-</td></tr><tr><td><code>/stats (Spieler)</code></td><td>Zeigt die eigenen oder die Statistiken eines anderen Spielers.</td><td>-</td></tr></tbody></table>


# Konfiguration

Passe die Arena-Einstellungen, die Wurstel/Suppen-Heilung (Soup PvP), das Scoreboard, die Datenbankverbindungen und Gewinner-Auszahlungen des **1vs1**-Plugins flexibel in der `config.yml` an.

***

## Dateiübersicht

Das Plugin erstellt nach dem ersten Serverstart folgende Datei:

* **`plugins/1vs1/config.yml`**: Beinhaltet alle grundlegenden Optionen, Chatnachrichten, Scoreboards und Sounds.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Einstellungen" %}

#### Allgemeine Optionen

```yaml
# Der Präfix vor Systemnachrichten
prefix: '&7[1vs1]'

# Schaltet den Server in den Setup-Modus (verhindert normales Beitreten ohne Admin-Permission)
setup: true

# Gewinner-Belohnungsbefehle
winnercmds:
- eco give %player% 100
```

{% endtab %}

{% tab title="🍲 Soup PvP" %}

#### Suppen-Heilung

```yaml
soup:
  enable: true # Aktiviert Suppenheilung (beim Rechtsklick auf Pilzsuppen)
  hearth: 2.5 # Anzahl der geheilten Herzen pro Suppe
```

{% endtab %}

{% tab title="🗄️ MySQL" %}

#### Datenbank-Optionen

> \[!WARNING] **Achtung Code-Schreibfehler:** Der Datenbank-Schlüssel in der MySQL-Sektion heißt **`datebase`** (mit "te" in der Mitte) statt `database`. Achte darauf beim Eintragen deines Datenbanknamens!

```yaml
MySQL:
  host: localhost
  port: '3306'
  username: user
  datebase: db # Schreibweise beachten!
  password: password123
```

{% endtab %}

{% tab title="🔊 Sounds" %}

#### Akustische Rückmeldung

```yaml
Sound:
  win: ENTITY_ENDER_DRAGON_DEATH
  countdown: BLOCK_NOTE_BLOCK_SNARE
  joinorinvite: ENTITY_PLAYER_LEVELUP
  newrequest: ENTITY_PLAYER_LEVELUP
  leavequeue: BLOCK_ANVIL_USE
```

{% endtab %}
{% endtabs %}

***

## Visuelle Layouts (Titles & Scoreboard)

Du kannst die Bildschirmanzeigen (Titles) und das Sidebar-Scoreboard vollständig anpassen:

```yaml
# Bildschirm-Texte (Titles)
title:
  joinqueue:
    main: '&7Warteschlange &abeigetreten'
    sub: '&8Kit: &7%kit%'
  leavequeue:
    main: '&7Warteschlange &cverlassen'
    sub: '&8Kit: &7%kit%'
  arenaloading:
    main: '&6Arena is loading...'
    sub: ''
  win:
    main: '&e%player%'
    sub: '&ehas won'

# Anzeigenschalter
options:
  actionbar: true
  sb: true
  healthdisplay: true

# Scoreboard-Einträge
sb:
  title: '&aDyroxplays.de'
  board:
  - '&a '
  - '&fArena:'
  - '&e%1vs1_arena%'
  - '&b '
  - '&fGegner:'
  - '&b%1vs1_vs%'
  - '&c '
  - '&fDeaths: '
  - '&c%1vs1_deaths%'
  - '&d '
  - '&fKills:'
  - '&a%1vs1_kills%'
  - '&e '
```

***

## System- und Fehlermeldungen

```yaml
# Chat-Meldungen beim Beitreten/Verlassen
joinmessage: '&e%player% &eist gejoint'
quitmessage: '&e%player% &eist geleavt'

messages:
  help: |-
    &7====&6Help&7====
    &e/1vs1 setLobby &7- Setze Lobby
    &e/1vs1 setSpawn <1/2> &7- Setzt Spawnpunkt auf Arena
    &e/1vs1 setTopWall <1-10> &7- Setzt Top10 Wand
    &e/1vs1 saveKit <0-8> &7- Speichert dein Inv als Kit
    &e/1vs1 worldTP <worldname> &7- Lässt dich zu einer Welt teleportieren

    &e/stats (<Spieler>) &7- Zeigt Stats von Spieler an
    &e/quit &7- Kampf aufgeben
  setlocation: '&a%name% wurde auf deine Location gesetzt'
  noperm: '&cDazu hast du keine Rechte.'
  savekit: '&aKit wurde gespeichert.'
  setlobby: '&aLobby wurde gespeichert.'
  settopwall: '&cNutze: /settopwall <1-10>'
  arenacreated: '&a%name% Neue Arena wurde erstellt, bzw. geupdated. &7Falls irgendwas in der Welt umgebaut wurde, denke dran die Datei neu in den /saves/ ordner einzufügen!!'
  quit: '&7%player% hat gequittet'
  error:
    serverkick:
      setup: |-
        &cDer Server ist in &esetup: true &ceingestellt
         &cDu brauchst die &ePermission 1vs1.admin &czum joinen
         &coder stelle in der Config &fsetup: false &cund &frestarte den Server
    worldnotexit: '&cDie Welt %name% ist nicht geladen.'
    alreadysendrequest: '&cDu hast %player% bereits eine anfrage gesendet!'
    ingame: '&cDu bist bereits in einem 1vs1'
    isingame: '&c%player% ist bereits in einem 1vs1'
    notquitable: '&cDu bist nicht in einem 1vs1 oder es hat noch nicht gestartet, du kannst nicht quitten!'
  success:
    queuejoin: '&aDu bist nun in der Warteschlange'
    queueleave: '&aDu bist nun nicht mehr in der Warteschlange'
    win: '&a%player% hat gewonnen'
    accept: '&aDu hast %player%''s Anfrage angenommen'
    accepttarget: '&a%player% hat deine Anfrage angenommen'
    sentrequest: '&a%player% wurde eine Anfrage Kit: %kit%&a gesendet!'
    sentrequesttarget: '&a%player% hat dir eine Anfrage Kit: %kit%&e gesendet.'

# Statistik-Nachricht (/stats)
stats:
- '&eStats von %player%'
- '&fKills: %kills%'
- '&fDeaths: %deaths%'
- '&fWins: %wins%'
- '&fGespielte Runden: %played%'
- '&fK/D: %kd%'
- '&fRang: %rang%'

# Statswand-Schilder (Top 10)
topwall:
  '1': 'Rang: %rang%'
  '2': ''
  '3': '%player%'
  '4': 'Wins: %wins%'
```


# Kit Erstellung

Erstelle, konfiguriere und speichere deine eigenen Kampfausrüstungen (Kits) für den 1vs1-Modus.

***

## Setup-Schritte für Kits

{% stepper %}
{% step %}

#### Inventar im Spiel einrichten

1. Logge dich auf deinem Minecraft-Server ein.
2. Richte dein Spieler-Inventar (inklusive Rüstung, Hotbar-Items, Tränken, Nahrung und Verzauberungen) exakt so ein, wie das Kit später ausgegeben werden soll.
   {% endstep %}

{% step %}

#### Kit im Spiel speichern

Führe folgenden Befehl aus, um dein aktuelles Inventar als Kit abzuspeichern:

```plaintext
/1vs1 saveKit <0-8>
```

* **`<0-8>`**: Bestimmt den Slot in der Kit-Auswahl-GUI des Plugins (0 = erster Slot links, 8 = letzter Slot rechts).
  {% endstep %}

{% step %}

#### Kit-Details anpassen (Optional)

Du kannst das Icon und den Namen des Kits in der Konfiguration festlegen:

1. Öffne die Datei `/plugins/1vs1/kits.yml`.
2. Finde die Sektion deines gewählten Slots (z. B. `'0'`).
3. Passe das Anzeige-Item (`displayItem`) an.

```yaml
'0':
  displayItem: STONE_SWORD:0:&eStarter-Kit
```

* **Format**: `MATERIALNAME:SHORTID:ANZEIGENAME`
* *Hinweis*: Nutze ab Minecraft-Version 1.13 für `SHORTID` immer `0`.
  {% endstep %}

{% step %}

#### Änderungen anwenden

1. Speichere die Datei `kits.yml`.
2. Starte deinen Server neu (empfohlen), oder lade das Plugin neu, um das Kit zu laden.
   {% endstep %}
   {% endstepper %}


# Funktionen & Setup-Anleitung

Ermögliche es deinen Spielern, serverweite Abstimmungen (wie Voteban, Votekick, Zeitumstellungen oder Item-Clearing) direkt über ein übersichtliches GUI-Menü zu starten und abzustimmen.

{% hint style="success" %}
⚖️ **Fördere die Community-Interaktion durch faire, demokratische Abstimmungen auf deinem Server!**
{% endhint %}

## Features

* **GUI-Basiertes Menü:** Starten von vordefinierten Abstimmungen über ein grafisches Inventar.
* **Bungee-Chat-Abstimmung:** Spieler stimmen direkt per Klick im Chat für "Ja" oder "Nein" ab (mit interaktiven Hover-Effekten).
* **Volle Kostenkontrolle:** Binde Abstimmungen an Geldkosten (über Vault), um Spam zu verhindern.
* **Cooldown-System:** Einstellbarer Cooldown pro Spieler, der von Admins auch vorzeitig aufgehoben werden kann.
* **Konfigurierbare Aktionen:** Ausführen beliebiger Konsolen- oder Spieler-Befehle bei erfolgreichem Votum.

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation

Lade die `.jar`-Datei in das Verzeichnis `/plugins/` deines Servers hoch.
{% endstep %}

{% step %}

#### Abhängigkeiten prüfen

Stelle sicher, dass **Vault** und ein unterstütztes Economy-System (z. B. EssentialsX) installiert und aktiv sind, um die Kostenverwaltung zu ermöglichen.
{% endstep %}

{% step %}

#### Server starten & konfigurieren

1. Starte den Server einmal, damit der Ordner `/plugins/Abstimmung/` und die standardmäßige `config.yml` generiert werden.
2. Öffne die `config.yml` und passe deine Abstimmungen, Cooldowns, Preise und Nachrichten nach Wunsch an.
3. Führe einen Server-Neustart durch, um die Konfigurationen final zu laden.
   {% endstep %}
   {% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/abstimmung</code></td><td>Öffnet das Abstimmungs-GUI für Spieler.</td><td><code>abstimmung.use</code></td></tr><tr><td><code>/fixabstimmung &#x3C;Spieler></code></td><td>Hebt den Cooldown eines Spielers für die nächste Abstimmung vorzeitig auf.</td><td><code>abstimmung.fix</code></td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

In diesem Abschnitt findest du die Erklärungen zu den Einstellungsbereichen der `config.yml` des **Abstimmung**-Plugins.

***

## Dateiübersicht

Nach dem ersten Start generiert das Plugin folgende Datei:

* **`plugins/Abstimmung/config.yml`**: Beinhaltet alle Einstellungen zu Preisen, Cooldowns, GUI-Strukturen und die Abstimmungsoptionen.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Optionen" %}

#### Allgemeine Einstellungen

```yaml
# Der Präfix vor Systemmeldungen im Chat
prefix: '&7[&aAbstimmung&7]'

# Cooldown (in Sekunden), bevor ein Spieler eine neue Umfrage starten kann
cooldownsec: 43200

# Wirtschaftsbefehle zum Hinzufügen/Entfernen von Geld (Vault-Alternative)
AddMoneyCommand: eco give %player% %money%
RemoveMoneyCommand: eco take %player% %money%
```

{% endtab %}

{% tab title="🗳️ GUI-Layout" %}

#### Abstimmungs-GUI & Knöpfe

```yaml
invname: '&aAbstimmung'
invreihen: 3

# Texte & Tooltips für Ja/Nein Knöpfe im Chat/GUI
'yes': '&aJa'
'no': '&cNein'
overyes: '&7Stimme für &aJa &7ab'
overno: '&7Stimme für &cNein &7ab'
```

{% endtab %}

{% tab title="💬 Nachrichten" %}

#### Systemnachrichten

```yaml
messages:
  result: '&eDas Ergebnis von der Abstimmung von %player% lautet:'
  fixabstimmung: '&a%player%''s Cooldown wurde aufgehoben, er kann nun eine neue Abstimmung starten.'
  finished: '&cAbstimmung bereits abgelaufen'
  voted: '&aDu hast für %vote% Abgestimmt'
  errorvoted: '&cDu hast bereits für diese Abstimmung eine Stimme abgegeben.'
  enterplayername: '&cBitte gebe einen Spielernamen an.'
  noperm: '&cDazu hast du keine Rechte.'
  notenoughmoney: '&cDu brauchst mind. %money% $, Vorgang abgebrochen.'
  notonlne: '&cDer Spieler ist nicht online, Vorgang abgebrochen.'
  success: '&aEine Abstimmung wurde gestartet.'
  error: '&cDu kannst erst wieder in %hour% Stunden, %min% Minuten und %sec% Sekunden eine Abstimmung starten!'
  usage: '&cNutze: /fixabstimmung <Spieler>'
```

{% endtab %}
{% endtabs %}

***

## Abstimmungs-Optionen erstellen (`votes`)

Unter dem Key `votes` in der Config kannst du beliebig viele Abstimmungstypen erstellen. Jeder Eintrag wird über seine Slot-Nummer definiert.

### Konfigurations-Beispiel:

```yaml
votes:
  '10': # Slot-Nummer im GUI
    material: BARRIER # Item-Material im GUI
    shortid: 0
    price: 15000 # Kosten, um die Abstimmung zu starten
    name: '&eAbstimmung starten:'
    lore:
      - '&7Wirft einen bösen Spieler &cfür 5 Minuten raus!'
      - '&7Preis: &a15000$'
    playernameneeded: true # Benötigt die Angabe eines Zielspielers
    command: '[CONSOLE]ban %player% 5min Abstimmung' # Befehl bei positivem Ausgang
    broadcast:
      start: # Chat-Broadcast beim Start der Umfrage
        - '&a============'
        - '&7%player% hat eine &eBanabstimmung für %target% gestartet'
        - '&7Soll %target% gebannt werden?'
        - '%vote%' # Platzhalter für die klickbaren Ja/Nein Knöpfe
        - '&a============'
      'no': # Chat-Broadcast bei abgelehntem Ergebnis (Mehrheit "Nein")
        - '&a============'
        - '%result%'
        - '&7Das heißt, dass %target% nicht gebannt wird'
        - '&a============'
      'yes': # Chat-Broadcast bei erfolgreichem Ergebnis (Mehrheit "Ja")
        - '&a============'
        - '%result%'
        - '&7Das heißt, dass %target% gebannt wurde.'
        - '&a============'
```

* **`command` Prefix**: Du kannst Befehle mit `[CONSOLE]` (wird über die Serverkonsole ausgeführt) oder ohne Präfix (wird als Spieler ausgeführt) definieren.
* **`playernameneeded`**: Wenn `true`, öffnet sich beim Klick ein Chat-Prompt, bei dem der Spieler erst einen Zielspielernamen eingeben muss.


# Eigene Abstimmungen

In diesem Guide lernst du, wie du eigene Abstimmungen (Votes) für dein **Abstimmungen**-Plugin erstellst und verwaltest.

***

## Grundlagen des Abstimmungs-Systems

Das System ermöglicht Spielern, über ein GUI-Menü Umfragen zu starten. Ein Vote hat folgende Eigenschaften:

1. **Kosten:** Das Starten eines Votes kostet In-Game-Geld (`price`).
2. **Ziel-Eingabe (playernameneeded):** Bestimmt, ob der Abstimmende einen Spielernamen in den Chat eingeben muss (z. B. für Kick-Votes).
3. **Ausführung:** Wenn die Mehrheit mit "JA" stimmt, wird der hinterlegte Befehl ausgeführt (entweder durch den Spieler oder die Konsole).
4. **Interaktive Buttons:** Während des Votes werden "JA" und "NEIN" Buttons im Chat angezeigt.

***

## Konfigurations-Struktur

Jeder Abstimmungstyp wird unter dem Key `votes` auf einem bestimmten GUI-Slot konfiguriert (z. B. Slot `'11'`).

```yaml
votes:
  '11': # Slot im GUI-Menü (0-26)
    material: 'MATERIALNAME'       # Symbol im GUI
    shortid: 0                     # Sub-ID (für ältere Minecraft-Versionen)
    name: 'Anzeigename'             # Name des Items im Menü
    price: 500                     # Kosten zum Starten des Votes
    playernameneeded: true         # Muss der Spieler einen Namen im Chat eingeben?
    command: '[CONSOLE]kick %target% &cMehrheitlich gekickt!' # Auszuführender Befehl bei Erfolg
    
    # Broadcast-Meldungen im Chat
    broadcast:
      start:
        - '&6&l%player% &7hat eine Abstimmung gestartet, um &c%target% &7zu kicken!'
        - '%vote%'                 # Dieser Platzhalter rendert die JA/NEIN-Klickbuttons!
      yes:
        - '&aDie Abstimmung war erfolgreich! &e%target% &7wurde gekickt.'
        - '%result%'               # Dieser Platzhalter rendert das Endergebnis (JA/NEIN Stimmenanzahl)!
      no:
        - '&cDie Abstimmung ist fehlgeschlagen! &e%target% &7darf bleiben.'
        - '%result%'
```

***

## Platzhalter & Optionen

* **`[CONSOLE]`-Präfix im Befehl:** Wenn der Befehl unter `command` mit `[CONSOLE]` beginnt, führt die Konsole den Befehl aus (z. B. `[CONSOLE]kick %target%`). Fehlt das Präfix, wird der Befehl im Namen des abstimmenden Spielers ausgeführt.
* **Platzhalter im Befehl & in Nachrichten:**
  * `%player%`: Der Name des Spielers, der die Abstimmung gestartet hat.
  * `%target%`: Der Name des Ziel-Spielers (falls `playernameneeded: true`).
  * `%world%`: Der Name der Welt, in der die Abstimmung gestartet wurde.
  * `%vote%`: Rendert die interaktiven Klick-Buttons im Chat zum Abstimmen.
  * `%result%`: Zeigt das Endergebnis der Abstimmung im Chat an.

***

## Konfigurations-Beispiele

### 1. Kick-Abstimmung (mit Spielername)

Ein Vote, um einen störenden Spieler durch die Konsole kicken zu lassen:

```yaml
  '11':
    material: LAVA_BUCKET
    name: '&c&lSpieler kicken'
    price: 1000
    playernameneeded: true
    command: '[CONSOLE]kick %target% &cAbstimmung erfolgreich!'
    lore:
      - '&7Starte einen Vote, um einen'
      - '&7Spieler vom Server zu werfen.'
      - ''
      - '&7Kosten: &e1000 Coins'
    broadcast:
      start:
        - '&8» &c&lVote &8| &e%player% &7will &c%target% &7kicken!'
        - '%vote%'
      yes:
        - '&8» &c&lVote &8| &aErfolgreich! &e%target% &7wurde gekickt.'
        - '%result%'
      no:
        - '&8» &c&lVote &8| &cFehlgeschlagen! &e%target% &7bleibt.'
        - '%result%'
```

### 2. Sonnen-Abstimmung (ohne Spielername)

Ein Vote, um das Wetter auf Sonne zu stellen (wird im Namen des Spielers ausgeführt):

```yaml
  '13':
    material: SUNFLOWER
    name: '&e&lSonnen-Vote'
    price: 250
    playernameneeded: false
    command: 'sun' # Führt /sun als Spieler aus
    lore:
      - '&7Stimmt ab, um das Wetter'
      - '&7auf Sonne zu stellen.'
      - ''
      - '&7Kosten: &e250 Coins'
    broadcast:
      start:
        - '&8» &e&lVote &8| &e%player% &7möchte die Sonne scheinen lassen!'
        - '%vote%'
      yes:
        - '&8» &e&lVote &8| &aErfolgreich! Die Sonne scheint nun.'
        - '%result%'
      no:
        - '&8» &e&lVote &8| &cFehlgeschlagen! Es bleibt bewölkt.'
        - '%result%'
```

***

## Schritt-für-Schritt-Anleitung: Neue Abstimmung hinzufügen

{% stepper %}
{% step %}

#### Slot bestimmen

Wähle einen freien Slot in der GUI (Slots 0 bis 26, standardmäßig 27 Slots insgesamt).
{% endstep %}

{% step %}

#### playernameneeded konfigurieren

Soll die Abstimmung eine bestimmte Person betreffen?

* Falls ja, setze `playernameneeded: true` (der Spieler wird beim Klick aufgefordert, den Namen im Chat einzugeben).
* Falls nein, setze `playernameneeded: false`.
  {% endstep %}

{% step %}

#### Befehl festlegen

Definiere den auszuführenden Befehl bei erfolgreichem Votingergebnis. Verwende `[CONSOLE]` am Anfang, falls der Spieler für den Befehl keine Rechte besitzt.
{% endstep %}

{% step %}

#### Broadcasts eintragen

Passe die Start-, Erfolgs- und Fehlschlag-Nachrichten an. Vergiss nicht die Platzhalter `%vote%` und `%result%`.
{% endstep %}
{% endstepper %}


# Beschreibung

Biete deinen Spielern ein komfortables In-Game Handelssystem mit anpassbaren Kategorien, um Items, Köpfe und Blöcke unkompliziert per GUI-Menü zu kaufen oder zu verkaufen.

{% hint style="success" %}
💰 **Erstelle eine dynamische Server-Wirtschaft mit dem vollständig konfigurierbaren AdminShop!**
{% endhint %}

## Features

{% tabs %}
{% tab title="🛒 Kauf & Verkauf" %}

#### Transaktionen

* **Linksklick:** Kauft ein Item (Setze Preis auf `-1` in der Config, um den Kauf zu deaktivieren).
* **Rechtsklick:** Verkauft ein Item an den Shop (Setze Preis auf `-1` in der Config, um den Verkauf zu deaktivieren).
* **Shift + Klick:** Sofortiges Kaufen oder Verkaufen eines vollen Stacks (64x) (Deaktivierbar mit `cancelshift: true`).
* **%HIDE% Platzhalter:** Versteckt optional Namen und/oder Lores in der GUI beim Kauf.
  {% endtab %}

{% tab title="🎨 Kategorien & Design" %}

#### Customisierung

* **Eigene Kategorien:** Erstelle unbegrenzt viele Kategorien mit eigenen Icons und Slots.
* **100% anpassbar:** Alle Menü-Namen, Lores und Slot-Belegungen lassen sich in der `config.yml` definieren.
* **Vault-Integration:** Reibungslose Abbuchung und Gutschrift über das Wirtschaftssystem deines Servers.
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch.
{% endstep %}

{% step %}

#### Abhängigkeiten prüfen

Stelle sicher, dass **Vault** und ein Economy-Plugin (z. B. EssentialsX) installiert sind.
{% endstep %}

{% step %}

#### Server starten & Konfiguration anpassen

1. Starte den Server, damit die Standard-`config.yml` generiert wird.
2. Bearbeite `/plugins/AdminShop/config.yml`, um deine Shop-Kategorien und Verkaufs-Items einzurichten.
3. Führe den Befehl `/adminshop reload` aus, um die Änderungen direkt live zu laden.
   {% endstep %}
   {% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/adminshop</code></td><td>Öffnet die Benutzeroberfläche des Shops für den Spieler.</td><td>-</td></tr><tr><td><code>/adminshop reload</code></td><td>Lädt die Shop-Konfiguration ohne Server-Neustart neu.</td><td><code>adminshop.reload</code></td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Passe die Shop-Kategorien, die Kauf- und Verkaufspreise, das GUI-Design sowie alle In-Game-Nachrichten des **AdminShop**-Plugins flexibel in der `config.yml` an.

***

## Dateiübersicht

Das Plugin erstellt nach dem ersten Serverstart folgende Datei:

* **`plugins/AdminShop/config.yml`**: Verwaltet alle Shop-Kategorien, Preise, Menü-Designs und Systemnachrichten.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Einstellungen" %}

#### Allgemeine Optionen

```yaml
# Der Präfix vor Systemnachrichten im Chat
prefix: '&7[&cAdminShop&7]'

# Name der Haupt-Shop-GUI
invname: '&cAdminShop'
```

{% endtab %}

{% tab title="💰 Alles verkaufen" %}

#### Schnellverkauf-Option

```yaml
# Richtet ein Item ein, um das gesamte Inventar auf einmal zu verkaufen
sellallitems:
  material: COAL_ORE
  shortid: 0
  slot: 8
  name: '&7Alle Items verkaufen'
  lore:
  - '&aVerkaufe alle möglichen Items'
  - '&aaus deinem Inventar'
  - '&8(Zum Deaktivieren den Slot auf -1 setzen!)'
```

{% endtab %}

{% tab title="🎨 Platzhalter" %}

#### GUI-Design

```yaml
# Füllt leere Slotbereiche mit Glas
placeholder:
  material: GRAY_STAINED_GLASS_PANE
  shortid: 0
```

{% endtab %}
{% endtabs %}

***

## Kategorien & Verkaufs-Items (`categories` & `gui`)

Der Shop ist in Kategorien unterteilt. Spieler klicken auf eine Kategorie in der Haupt-GUI, um in das jeweilige Untermenü mit den Waren zu gelangen.

### Konfigurations-Beispiel:

```yaml
# Definition der Kategorien in der Haupt-GUI
categories:
  erze:
    material: COAL_ORE
    shortid: 0
    slot: 3
    name: '&7Erze'
    lore:
    - '&aHier findest du die ganzen Erze!'
  werkzeug:
    material: STONE_PICKAXE
    shortid: 0
    slot: 5
    name: '&7Werkzeug'
    lore:
    - '&7Rüste dich aus!'

# Definition der Items innerhalb der jeweiligen Kategorie
gui:
  erze:
    '30': # Slotnummer in der Kategorie-GUI
      material: COAL_ORE
      shortid: 0
      amount: 5 # Verkaufs-Menge
      buyprice: 100 # Kaufpreis (0 = nicht kaufbar)
      sellprice: 100 # Verkaufspreis (0 = nicht verkaufbar)
    '31':
      material: DIAMOND_ORE
      shortid: 0
      amount: 5
      buyprice: 500
      sellprice: 300
      name: '&cCustom Diamanten-Erz Name'
      lore:
      - '&7Eine spezielle Beschreibung'
      - '%HIDE%&aDieser Lore-Eintrag wird beim Klick versteckt'
```

* **`%HIDE%`**: Zeilen mit dem Präfix `%HIDE%` werden dem Käufer nicht auf dem endgültigen Item im Inventar angezeigt, sondern dienen nur zur Information im Shop-Menü.

***

## Systemnachrichten

```yaml
messages:
  noperm: '&cDazu hast du keine Rechte.'
  success:
    bought: '&aDu hast dir was für %money% gekauft!'
    sold: '&aDu hast was für %money% verkauft!'
  error: '&cDu brauchst mindestens %money%!'
  notsellable: '&cDu kannst das Item nicht verkaufen!'
  notbuyable: '&cDu kannst das Item nicht kaufen!'
  itemnotininv: '&cDu hast das Item nicht vorrätig in deinem Inventar!'
  invfull: '&cDein Inventar ist voll!'
```


# Eigene Kategorien & Items

In dieser Anleitung erfährst du Schritt-für-Schritt, wie du im **AdminShop**-Plugin neue Kategorien erstellst und diesen eigene Items zum Kaufen und Verkaufen zuweist.

***

## 1. Eine neue Kategorie erstellen

Alle Hauptkategorien werden in der `config.yml` im Bereich `categories` definiert. Der Bezeichner (z. B. `erze` oder `baustoffe`) dient als interner Name, über den später die Gegenstände zugewiesen werden.

### Schritt-für-Schritt-Anleitung:

{% stepper %}
{% step %}

#### Eintrag unter categories anlegen

Öffne die Datei `/plugins/AdminShop/config.yml` und erstelle unter dem Key `categories` deine neue Kategorie (z. B. `baustoffe`):

```yaml
categories:
  baustoffe:
    material: OAK_LOG # Das Icon der Kategorie im Hauptmenü
    shortid: 0        # Die Sub-ID des Items (ab 1.13 immer 0)
    slot: 11          # Slot-Position im Hauptmenü (0-53)
    name: '&eBaustoffe & Holz'
    lore:
      - '&7Hier findest du alle Blöcke zum Bauen.'
```

{% endstep %}

{% step %}

#### Slot-Position wählen

Achte darauf, dass der gewählte `slot` (z. B. `11`) noch nicht von einer anderen Kategorie besetzt ist.
{% endstep %}
{% endstepper %}

***

## 2. Items zur Kategorie hinzufügen

Sobald die Kategorie existiert, kannst du im Bereich `gui` die eigentlichen Gegenstände hinzufügen, die Spieler in dieser Kategorie erwerben oder verkaufen können.

### Schritt-für-Schritt-Anleitung:

{% stepper %}
{% step %}

#### Kategorie-Block unter gui anlegen

Erstelle im Bereich `gui` der `config.yml` einen neuen Abschnitt mit dem exakt gleichen Namen deiner Kategorie (z. B. `baustoffe`):

```yaml
gui:
  baustoffe:
    '10': # Slot-Nummer im Kategorie-Menü (0 bis 53)
      material: OAK_LOG
      shortid: 0
      amount: 16       # Die Menge, die auf einmal gehandelt wird
      buyprice: 50     # Kaufpreis für 16 Stück (0 = Kauf deaktiviert)
      sellprice: 25    # Verkaufspreis für 16 Stück (0 = Verkauf deaktiviert)
      name: '&e16x Eichenstamm' # Optional: Eigener Anzeigename
    '11': # Weiterer Slot
      material: STONE
      shortid: 0
      amount: 64
      buyprice: 120
      sellprice: 60
```

{% endstep %}

{% step %}

#### %HIDE% in Beschreibungen nutzen (Optional)

Wenn du Beschreibungen hinzufügen möchtest, die Spieler nur im Shop-Menü sehen, aber nicht auf dem gekauften Item haben sollen, benutze den `%HIDE%`-Präfix:

```yaml
      lore:
        - '&7Ein stabiler Baustoff.'
        - '%HIDE%&cKaufpreis: 120 Coins' # Wird beim Kauf vom Item entfernt!
```

{% endstep %}

{% step %}

#### Änderungen laden

Führe im Spiel den Befehl `/adminshop reload` aus, um deine neue Kategorie und die Items ohne Server-Neustart direkt zu laden.
{% endstep %}
{% endstepper %}


# Beschreibung

Bringe festliche Stimmung auf deinen Server und belohne deine Spieler zur Weihnachtszeit mit einem interaktiven Adventskalender-System, täglichen Belohnungen und Spielzeitanforderungen.

{% hint style="success" %}
🎁 **Steigere die Spielerbindung im Dezember durch tägliche Geschenke und festliche Belohnungen!**
{% endhint %}

## Features

{% tabs %}
{% tab title="🎄 Adventskalender" %}

#### Kalender-System

* **Festliche GUI:** Übersichtliches Menü mit Türchen von Tag 1 bis 24 (Stufenweise Freischaltung pro Tag im Dezember).
* **Finale Belohnung (Tag 25):** Eine konfigurierbare Bonus-Belohnung für Spieler, die fleißig alle 24 Türchen geöffnet haben.
* **Rückwirkendes Öffnen:** Lege fest, wie viele Tage verpasste Türchen rückwirkend geöffnet werden dürfen (z. B. `0` = nur am jeweiligen Tag, `24` = unbegrenzt).
  {% endtab %}

{% tab title="⏱️ Spielzeit & AFK" %}

#### Aktivitätsprüfung

* **Spielzeitanforderung:** Türchen können an eine tägliche Mindestspielzeit in Minuten gekoppelt werden.
* **AFK-Check:** Ein integrierter AFK-Schutz sorgt dafür, dass nur aktive Spielzeit gezählt wird (Zeit einstellbar).
* **Bypass-Option:** Admins oder VIPs können per Permission von der Spielzeitpflicht befreit werden.
  {% endtab %}

{% tab title="☃️ Schneemann NPC" %}

#### Interaktives NPC-System

* **Clickable NPC:** Spawne einen Schneemann NPC am Spawn, über den Spieler den Kalender öffnen.
* **AI- & Schadenschutz:** Der NPC besitzt keine KI, ist lautlos (silent) und unverwundbar.
* **Entfernen:** Admins können den Schneemann mit Sneaken + Linksklick abbauen.
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch.
{% endstep %}

{% step %}

#### Datenbank & Config einrichten

1. Starte den Server einmal, damit die Standard-Dateien generiert werden.
2. Konfiguriere optional deine MySQL-Datenbankverbindung in `/plugins/Adventskalender/config.yml`.
3. Passe Belohnungen (Commands) und Spielzeiten für jedes Türchen einzeln an.
   {% endstep %}

{% step %}

#### Schneemann NPC platzieren

1. Gehe im Spiel an die Position, an der der Kalender-NPC stehen soll.
2. Führe den Befehl `/adventskalender setentity` aus (erfordert `adventskalender.admin`).
3. Der Schneemann wird erstellt und ist sofort betriebsbereit!
   {% endstep %}
   {% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/adventskalender</code></td><td>Öffnet das Kalender-Menü (nur wenn <code>allowcmd: true</code>).</td><td>-</td></tr><tr><td><code>/adventskalender reload</code></td><td>Lädt die Config und das GUI-Layout neu.</td><td><code>adventskalender.admin</code></td></tr><tr><td><code>/adventskalender setentity</code></td><td>Spawnt den Schneemann-NPC an deiner aktuellen Position.</td><td><code>adventskalender.admin</code></td></tr><tr><td><code>/adventskalender ban &#x3C;Spieler></code></td><td>Schließt einen Spieler von der Teilnahme am Adventskalender aus.</td><td><code>adventskalender.admin</code></td></tr><tr><td><code>/adventskalender unban &#x3C;Spieler></code></td><td>Erlaubt einem gebannten Spieler wieder die Teilnahme.</td><td><code>adventskalender.admin</code></td></tr><tr><td><code>/adventmsg &#x3C;Spieler> &#x3C;Nachricht></code></td><td>Sendet eine direkte, farbige Nachricht an einen Spieler (ideal für Reward-Befehle).</td><td><code>adventskalender.adventmsg</code></td></tr><tr><td>-</td><td>Umgeht die tägliche Mindestspielzeit zum Öffnen von Türchen.</td><td><code>adventskalender.noplaytime</code></td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Passe das GUI-Design, die täglichen Spielzeitanforderungen, die MySQL-Anbindung und die Belohnungen für jedes Türchen flexibel in der `config.yml` an.

***

## Dateiübersicht

Das Plugin erstellt nach dem ersten Serverstart folgende Datei:

* **`plugins/Adventskalender/config.yml`**: Steuert alle Einstellungen, die Belohnungen der 24 Türchen und die finale Belohnung (Tag 25).

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Optionen" %}

#### Globale Einstellungen

```yaml
# Der Präfix vor Systemnachrichten
prefix: '&7[&cAdvents&2Kalender&7]'

# Ermöglicht das Öffnen des Kalenders per Befehl /adventskalender
allowcmd: false

# Cooldown (in Sekunden), ab wann ein Spieler als AFK gewertet wird (Spielzeit pausiert)
afkchecksec: 300

# Gibt an, wie viele Tage verpasste Türchen rückwirkend geöffnet werden dürfen (0 = nur am selben Tag, 24 = unbegrenzt)
retroactivedays: 24

# Loggt das Öffnen von Türchen in die Serverkonsole
logtoconsoleonopenday: true
```

{% endtab %}

{% tab title="🗄️ MySQL" %}

#### Datenbank-Optionen

```yaml
MySQL:
  enable: false
  host: localhost
  port: '3306'
  username: user
  database: db
  password: password123
```

* **`enable`**: Bei `true` werden die Beanspruchungs-Daten der Spieler in einer MySQL-Datenbank gespeichert. Dies ist ideal, falls du dieselben Daten über mehrere Server synchronisieren möchtest.
  {% endtab %}

{% tab title="☃️ GUI & NPC" %}

#### Optische Einstellungen

```yaml
# Menü-Design
gui:
  name: '&cAdvents&2Kalender'
  lenght: 3 # Reihenanzahl der GUI (1-6) - Schreibweise im Code beachten!
  
  # Optionale, statische Dekorations-Items in der GUI
  items:
    deko_links:
      material: OAK_LEAVES
      slot: 10
      name: '&aTannenzweig'
      lore:
      - '&7Ein schönes dekoratives Element'
    deko_rechts:
      material: RED_WOOL
      slot: 16
      name: '&cWeihnachtskugel'
      lore:
      - '&7Bringt festliche Stimmung'

# Texte für die Item-Zustände im Menü
lore:
  openable: '&aUngeöffnet'
  opened: '&7Bereits geöffnet'
  notnow: '&cDieser Tag kann noch nicht geöffnet werden'
  outdated: '&cAbgelaufen'
  playtime: '&7Spielzeit: &e%advent_ptdayhave% &7/ %advent_ptdayneed%'

# Kosmetische Einstellungen für den NPC-Schneemann
snowmanname: '&cAdvents&2Kalender'
achievesound: ENTITY_PLAYER_LEVELUP
```

{% endtab %}
{% endtabs %}

***

## Platzhalter im GUI definieren (`placeholder`)

Du kannst dekorative Glasscheiben im Menü platzieren, um die Türchen optisch einzurahmen.

```yaml
placeholder:
  enable: true
  RED_STAINED_GLASS_PANE;0: 0;2;4;6;8;18;26;36;38;42;44;46;48;50;52
  WHITE_STAINED_GLASS_PANE;0: 1;3;5;7;9;17;27;35;37;43;45;47;49;51;53
```

* **Format**: `MATERIAL;SHORTID: Slot-Listen (durch Semikolons getrennt)`

***

## Türchen konfigurieren (`adventskalender`)

Jedes der 24 Türchen kann einzeln konfiguriert werden.

### Konfigurations-Beispiel (Tag 1):

```yaml
adventskalender:
  '1': # Tag 1
    minplaytimeinminutes: 30 # Benötigte tägliche Onlinezeit in Minuten
    cmds: # Ausgeführte Befehle nach erfolgreichem Öffnen
    - give %player% STONE 1
    - adventmsg %player% &aDu hast erfolgreich Türchen &e#1 &ageöffnet
    item: # Darstellung des Türchens im GUI
      material: ACACIA_DOOR
      shortid: 0
      amount: 1
      slot: 0 # Slot im Menü
      name: '&aTürchen &e#1'
      lore:
      - ' '
      - '&7%status%' # Platzhalter für die definierten Lore-Zustandstexte
```

* **`cmds`**: Unterstützt den integrierten Befehl `adventmsg %player% <Nachricht>`, um farbige Nachrichten ohne standardmäßige Systempräfixe an den Spieler zu senden.

***

## Finale Belohnung (Tag 25)

Die finale Belohnung wird freigeschaltet, wenn ein Spieler alle 24 Türchen geöffnet hat.

```yaml
finalreward:
  enable: true
  day: 25
  item:
    material: GOLD_BLOCK
    name: '&aFinale Belohnung'
    lore:
    - ''
    - '&aSei jeden Tag dabei und öffne'
    - '&atäglich die Truhen, um am Ende'
    - '&ediese Extra-Tür öffnen zu können!'
    amount: 1
    slot: 26
  cmds:
  - give %player% GOLD_BLOCK 3
  - adventmsg %player% &aHerzlichen Glückwunsch! Du hast die finale Belohnung erhalten!
```

***

## Systemnachrichten

```yaml
messages:
  noperm: '&cDazu hast du keine Rechte'
  usage: '&cNutze: /adventskalender reload oder /adventskalender setentity oder /adventskalender <ban/unban> <Spieler>'
  notreachedplaytime: '&cDu hast deine Onlinezeit für diesen Tag noch nicht erreicht, aktueller Stand: %have% / %need% Minuten'
  ban:
    isban: '&c%player% ist vom Adventskalender bereits ausgeschlossen'
    notbanned: '&c%player% ist vom Adventskalender nicht ausgeschlossen'
    ban: '&a%player% ist nun vom Adventskalender ausgeschlossen'
    unban: '&a%player% kann nun wieder beim Adventskalender mitmachen'
    yourbanned:
    - '&cDu bist vom Adventskalender ausgeschlossen!'
  finalreward:
    notall: '&cDu hast (noch) nicht alle Türchen geöffnet!'
```


# Vorgefertigte Dateien

Hier findest du einige vorgefertige Dateien für das Plugin: Adventskalender

### config.yml

{% code expandable="true" %}

```yml
# ##// Plugin Coded by Dyroxplays. \##
afkchecksec: 180
logtoconsoleonopenday: true
placeholder:
  enable: true
  RED_STAINED_GLASS_PANE;0: 0;2;4;6;8;18;26;36;38;42;44;46;48;50;52
  WHITE_STAINED_GLASS_PANE;0: 1;3;5;7;9;17;27;35;37;43;45;47;49;51;53
prefix: '&2&lAdvent &8»'
MySQL:
  enable: false
  host: localhost
  port: '3306'
  username: user
  datebase: db
  password: password123
allowcmd: true
retroactivedays: 0
gui:
  name: '&c        &lAdventskalender'
  lenght: 6
  items:
    single:
      material: BOOK
      name: '&b&lInformationen'
      slot: 8
      lore:
      - '&1'
      - '&8»&f Hier kannst du &6jeden Tag &fein Türchen öffnen,'
      - '&f    dafür benötigst du jedes mal etwas &b&lSpielzeit&f.'
      - '&f    Das &cAFK-Stehen &fist dabei &4&lNICHT &ferlaubt.'
      - '&3'
      - '&4&l! &fAlle Türen dürfen nur &c&leinmal&f pro Person'
      - '&f    geöffnet werden. Das erneute öffnen, mithilfe'
      - '&f    von &bZweitaccounts&f, führt zu einem &4&lAusschluss&f.'
      - '&f    Außerdem zu einem &cNetzwerkbann &fund einer'
      - '&f    &cSperre &ffür &azukünftige Events&f.'
      - '&4'
      - '&8&o Die Playtime-Pflicht lässt sich auf Anfrage entfernen.'
lore:
  playtime: '&8 » &7Spielzeit: &e%advent_ptdayhave%&8/&e%advent_ptdayneed% &7Minuten'
  openable: '&e&l&o Jetzt abholen'
  opened: '&a&o Geöffnet'
  notnow: '&c Gesperrt'
  outdated: '&c Abgelaufen'
snowmanname: '&cAdventskalender'
achievesound: ENTITY_PLAYER_LEVELUP
messages:
  notreachedplaytime: '&cDu hast deine Onlinezeit für diesen Tag noch nicht erreicht!
    &8(&b%have%/%need%&8)'
  ban:
    isban: '&c%player% ist vom Adventskalender bereits ausgeschlossen'
    notbanned: '&c%player% ist vom Adventskalender nicht ausgeschlossen'
    ban: '&a%player% ist nun vom Adventskalender ausgeschlossen'
    unban: '&a%player% kann nun wieder beim Adventskalender mitmachen'
    yourbanned:
    - '&1'
    - ' &8• &cDu bist &4&lpermanent&c vom Adventskalender ausgeschlossen!'
    - '&2'
    - ' &8» &7Regeln:'
    - ' &7Jedes Türchen darf nur einmal pro Person geöffnet werden.'
    - '&3'
    - '&7&oDu hast Fragen? Melde dich beim &6&l&oContent&7&o-&6&l&oTeam&7&o!'
    - '&4'
  finalreward:
    notall: '&cDu musst alle vorherigen 24 Tage abgeholt haben, um dieses Türchen
      öffnen zu können.'
  noperm: '&cKeine Rechte.'
  usage: '&cNutze: /adventskalender reload oder /adventskalender setentity'
  open: '&7Du hast%name%&7 geöffnet.'
adventskalender:
  '1':
    cmds:
    - adventmsg %player% &8[&2Tag 1&8] &725 Kristalle &8•&4 ❤
    - kristalle add %player% 25
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l1'
      lore:
      - ' '
      - '&7%status%'
      amount: 1
      slot: 10
    minplaytimeinminutes: 30
  '2':
    cmds:
    - adventmsg %player% &8[&2Tag 2&8] &72x goldener Apfel &8•&4 ❤
    - minecraft:give %player% minecraft:golden_apple 2
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l2'
      lore:
      - ' '
      - '&7%status%'
      amount: 2
      slot: 11
    minplaytimeinminutes: 30
  '3':
    cmds:
    - adventmsg %player% &8[&2Tag 3&8] &732x Goldbarren &8•&4 ❤
    - give %player% gold_ingot 32
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l3'
      lore:
      - ' '
      - '&7%status%'
      amount: 3
      slot: 12
    minplaytimeinminutes: 45
  '4':
    cmds:
    - adventmsg %player% &8[&2Tag 4&8] &7650 Münzen + 1x Kuchen &8•&4 ❤
    - eco give %player% 650
    - minecraft:give %player% minecraft:cake 1
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l4'
      lore:
      - ' '
      - '&7%status%'
      amount: 4
      slot: 13
    minplaytimeinminutes: 30
  '5':
    cmds:
    - adventmsg %player% &8[&2Tag 5&8] &71x Luftblock •&8&4 ❤
    - minecraft:give %player% minecraft:structure_void 1
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l5'
      lore:
      - ' '
      - '&7%status%'
      amount: 5
      slot: 14
    minplaytimeinminutes: 30
  '6':
    cmds:
    - adventmsg %player% &8[&2Tag 6&8] &71x Starter-Crate &8•&4 ❤
    - case add 1 %player% 1
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l6'
      lore:
      - ' '
      - '&7%status%'
      amount: 6
      slot: 15
    minplaytimeinminutes: 45
  '7':
    cmds:
    - adventmsg %player% &8[&2Tag 7&8] &7Ozeanprefix 7d &8•&4 ❤
    - lp user %player% permission settemp prefix.ozean true 7d
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l7'
      lore:
      - ' '
      - '&7%status%'
      amount: 7
      slot: 16
    minplaytimeinminutes: 30
  '8':
    cmds:
    - adventmsg %player% &8[&2Tag 8&8] &775 Kristalle &8•&4 ❤
    - kristalle add %player% 75
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l8'
      lore:
      - ' '
      - '&7%status%'
      amount: 8
      slot: 19
    minplaytimeinminutes: 45
  '9':
    cmds:
    - adventmsg %player% &8[&2Tag 9&8] &712x Froschlicht &8•&4 ❤
    - minecraft:give %player% minecraft:verdant_froglight 6
    - minecraft:give %player% minecraft:pearlescent_froglight 6
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l9'
      lore:
      - ' '
      - '&7%status%'
      amount: 9
      slot: 20
    minplaytimeinminutes: 30
  '10':
    cmds:
    - adventmsg %player% &8[&2Tag 10&8] &750 Kristalle + 500 Coins &8•&4 ❤
    - eco give %player% 500
    - kristalle add %player% 50
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l10'
      lore:
      - ' '
      - '&7%status%'
      amount: 10
      slot: 21
    minplaytimeinminutes: 30
  '11':
    cmds:
    - adventmsg %player% &8[&2Tag 11&8] &78x rote Kerze + 400 XP &8•&4 ❤
    - minecraft:give %player% minecraft:red_candle 8
    - experience add %player% 400
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l11'
      lore:
      - ' '
      - '&7%status%'
      amount: 11
      slot: 22
    minplaytimeinminutes: 30
  '12':
    cmds:
    - adventmsg %player% &8[&2Tag 12&8] &732x goldene Karotte &8•&4 ❤
    - minecraft:give %player% minecraft:golden_carrot 32
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l12'
      lore:
      - ' '
      - '&7%status%'
      amount: 12
      slot: 23
    minplaytimeinminutes: 30
  '13':
    cmds:
    - adventmsg %player% &8[&2Tag 13&8] &72000 Coins &8•&4 ❤
    - eco give %player% 2000
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l13'
      lore:
      - ' '
      - '&7%status%'
      amount: 13
      slot: 24
    minplaytimeinminutes: 45
  '14':
    cmds:
    - adventmsg %player% &8[&2Tag 14&8] &71x antiker Schrott &8•&4 ❤
    - give %player% ANCIENT_DEBRIS 1
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l14'
      lore:
      - ' '
      - '&7%status%'
      amount: 14
      slot: 25
    minplaytimeinminutes: 30
  '15':
    cmds:
    - adventmsg %player% &8[&2Tag 15&8] &71x epische Crate &8•&4 ❤
    - case add 3 %player% 1
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l15'
      lore:
      - ' '
      - '&7%status%'
      amount: 15
      slot: 28
    minplaytimeinminutes: 45
  '16':
    cmds:
    - adventmsg %player% &8[&2Tag 16&8] &764x Beton &8•&4 ❤
    - minecraft:give %player% minecraft:red_concrete 32
    - minecraft:give %player% minecraft:green_concrete 32
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l16'
      lore:
      - ' '
      - '&7%status%'
      amount: 16
      slot: 29
    minplaytimeinminutes: 45
  '17':
    cmds:
    - adventmsg %player% &8[&2Tag 17&8] &780 Kristalle &8•&4 ❤
    - kristalle add %player% 80
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l17'
      lore:
      - ' '
      - '&7%status%'
      amount: 17
      slot: 30
    minplaytimeinminutes: 30
  '18':
    cmds:
    - adventmsg %player% &8[&2Tag 18&8] &732x Quarzblock &8•&4 ❤
    - minecraft:give %player% minecraft:quartz_block 32
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l18'
      lore:
      - ' '
      - '&7%status%'
      amount: 18
      slot: 31
    minplaytimeinminutes: 30
  '19':
    cmds:
    - adventmsg %player% &8[&2Tag 19&8] &7Dein eigener Kopf &8•&4 ❤
    - 'give %player% player_head 1 3 {SkullOwner: "%player%"}'
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l19'
      lore:
      - ' '
      - '&7%status%'
      amount: 19
      slot: 32
    minplaytimeinminutes: 45
  '20':
    cmds:
    - adventmsg %player% &8[&2Tag 20&8] &7120 Kristalle &8•&4 ❤
    - kristalle add %player% 120
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l20'
      lore:
      - ' '
      - '&7%status%'
      amount: 20
      slot: 33
    minplaytimeinminutes: 30
  '21':
    cmds:
    - adventmsg %player% &8[&2Tag 21&8] &71x Leuchtfeuer + 1400 Coins &8•&4 ❤
    - minecraft:give %player% minecraft:beacon 1
    - eco give %player% 1400
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l21'
      lore:
      - ' '
      - '&7%status%'
      amount: 21
      slot: 34
    minplaytimeinminutes: 45
  '22':
    cmds:
    - adventmsg %player% &8[&2Tag 22&8] &7200 Kristalle &8•&4 ❤
    - kristalle add %player% 200
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l22'
      lore:
      - ' '
      - '&7%status%'
      amount: 22
      slot: 39
    minplaytimeinminutes: 30
  '23':
    cmds:
    - adventmsg %player% &8[&2Tag 23&8] &71x Winter-Crate &8•&4 ❤
    - case add 4 %player% 1
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l23'
      lore:
      - ' '
      - '&7%status%'
      amount: 23
      slot: 40
    minplaytimeinminutes: 45
  '24':
    cmds:
    - adventmsg %player% &8[&2Tag 24&8] &73250 Münzen + 1x Winter-Crate + 50 Kristalle
      &8•&4 ❤
    - adventmsg %player% &8» &c&lFrohe Weihnachten! &4❤
    - case add 4 %player% 1
    - eco give %player% 3250
    - kristalle add %player% 50
    - title %player% times 40 160 40
    - title %player% subtitle {"text":"Frohe Festtage!","bold":true,"color":"red"}
    - title %player% title {"text":"\u2764\u2764\u2764","color":"dark_red"}
    item:
      material: CHORUS_PLANT
      name: '&c &lT&f&la&c&lg &2&l24'
      lore:
      - ' '
      - '&7%status%'
      amount: 24
      slot: 41
    minplaytimeinminutes: 60
finalreward:
  enable: true
  day: 25
  item:
    material: BEACON
    name: '&c &lT&f&la&c&lg &2&l25'
    lore:
    - ' '
    - ' &c&lSPECIAL TÜRCHEN!'
    - '&f &oDieses &2&oTürchen&f&o kannst du nur &6&oöffnen&f&o,'
    - '&f &owenn du alle &c&o24 Türchen&f&o abeholt hast!'
    amount: 25
    slot: 49
  cmds:
  - adventmsg %player% &8[&2&lTag &c&l25&8] &72x Winter-Crate + 250 Kristalle + Alle
    Prefixe 30d + 4200 Coins &8•&4 ❤
  - kristalle add %player% 250
  - case add 4 %player% 2
  - eco give %player% 4200
  - lp user %player% permission settemp prefix.* true 30d server=citybuild
  - lp user %player% permission settemp prefix.* true 30d server=farmwelt

```

{% endcode %}

{% file src="/files/0dacsyg0xpDl9eHNnzhd" %}


# Funktionen & Setup-Anleitung

Biete deinen Spielern ein vollwertiges Auktionshaus-System, bei dem Items zum Bieten (Versteigerung) oder zum Sofortkauf angeboten werden können – inklusive umfangreicher Sortierung und Datenbank-Migration.

{% hint style="success" %}
⚖️ **Ermögliche einen florierenden Spieler-zu-Spieler Handel mit flexiblen Auktions- und Biet-Optionen!**
{% endhint %}

## Features

{% tabs %}
{% tab title="🛒 Auktions-System" %}

#### Handels-Features

* **Sofortkauf & Versteigerung:** Items können zu einem festen Sofortkaufpreis, einem Startgebot oder beidem eingestellt werden.
* **Intelligente GUI-Sortierung:** Sortiere die Angebote nach neuesten Auktionen, bald endenden Auktionen oder Blocktypen.
* **Aktions-Steuerung:**
  * **Linksklick:** Item kaufen (fremde Auktion) oder löschen/zurücknehmen (eigene Auktion).
  * **Rechtsklick:** Auf das Item bieten (fremde Auktion).
    {% endtab %}

{% tab title="⚙️ Administration" %}

#### Verwaltung & Limitierung

* **Mengenbegrenzung:** Begrenze die maximale Anzahl an gleichzeitig aktiven Auktionen pro Spieler (entweder global oder dynamisch per Permission).
* **Storage-Typen:** Unterstützt SQLite (lokal), MySQL (für Netzwerke) oder klassische Datei-Speicherung (File).
* **Live-Migration:** Migriere deine gesamten Auktionsdaten live im laufenden Betrieb zwischen den Speicher-Typen.
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch.
{% endstep %}

{% step %}

#### Abhängigkeiten prüfen

Stelle sicher, dass **Vault** und ein funktionierendes Wirtschaftssystem installiert sind, da alle Transaktionen und Gebote darüber verrechnet werden.
{% endstep %}

{% step %}

#### Konfiguration anpassen

1. Starte den Server einmal, damit der Ordner `/plugins/Auction/` und die standardmäßige `config.yml` generiert werden.
2. Passe die Einstellungen in der `config.yml` nach deinen Wünschen an (Gebühren, Auktionsdauern, maximale Limits).
3. Starte den Server neu oder nutze `/auction reload`.
   {% endstep %}
   {% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/auction</code></td><td>Öffnet die Auktionshaus-GUI. (Aliase: <code>/auctions</code>, <code>/ah</code>, <code>/auktionshaus</code>)</td><td><code>auction.use</code></td></tr><tr><td><code>/auction reload</code></td><td>Lädt die Konfiguration und GUIs des Plugins neu.</td><td><code>auction.admin</code></td></tr><tr><td><code>/auction admin migrate &#x3C;from> &#x3C;to> [override]</code></td><td>Migriert die Auktionsdatenbank live im laufenden Betrieb. Erlaubt: <code>SQLITE</code>, <code>MYSQL</code>, <code>FILE</code>.</td><td><code>auction.admin</code></td></tr><tr><td>-</td><td>Erlaubt unbegrenzt viele gleichzeitig eingestellte Auktionen (wenn Limitierung aktiviert).</td><td><code>auction.auctions.*</code></td></tr><tr><td>-</td><td>Erlaubt eine spezifische Anzahl (NUMBER) an gleichzeitig eingestellten Auktionen.</td><td><code>auction.auctions.&#x3C;anzahl></code></td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

```yaml
prefix: '&7[&eAuction&7]'
```

Der Prefix, der in allen Plugin-Nachrichten verwendet wird.

```yaml
AddMoneyCommand: eco give %player% %money%
RemoveMoneyCommand: eco take %player% %money%
```

Befehle, um einem Spieler Geld zu geben oder zu nehmen. Diese müssen mit den Befehlen des verwendeten Wirtschaftssystems übereinstimmen (z.B. Essentials Economy).

```yaml
newauctioncooldown: 5
```

Die Wartezeit in Sekunden, die ein Spieler nach dem Erstellen einer Auktion warten muss, bevor er eine neue erstellen kann.

```yaml
pricefornewauction:
  price: 100
  percentageofbuy:
    enable: true
    percent: 10
```

Kosten für das Erstellen einer neuen Auktion. Der Preis kann als fester Betrag und/oder als Prozentsatz des Sofortkaufpreises festgelegt werden.

```yaml
bidsteps:
  '1': 100
  '2': 10
  '3': 1
```

Die Gebotsschritte in verschiedenen Stufen. Die Höhe der Schritte bestimmt, um wie viel das Gebot bei jedem Schritt erhöht wird.

```yaml
auctiontimeinhour: 48
```

Die maximale Dauer einer Auktion in Stunden.

```yaml
maxauctionperplayer:
  enablepermissioncheck: false
  highestmax: 60
```

Begrenzung der maximalen Anzahl an Auktionen pro Spieler. Wenn `enablepermissioncheck` auf `true` gesetzt ist, werden Berechtigungen verwendet, um die Anzahl zu bestimmen.

```yaml
time:
  seconds: '&7Sekunden'
  mins: '&7Minuten'
  hours: '&7Stunden'
  days: '&7Tage'
```

Angepasste Texte für die Zeiteinheiten, die in Nachrichten und der GUI verwendet werden.

```yaml
guiback: '&cZurück'
```

Text für den "Zurück"-Button in der GUI.

```yaml
guibid:
  infoname: '&aDein aktueller Gebot:'
  acceptbid: '&a%bid% bieten.'
```

Texte für das Gebotsfenster in der GUI.

```yaml
guinewauction:
  setbuyprice: '&aDein aktueller Kaufpreis:'
  setstartbid: '&aDein aktueller Startgebot:'
  next: '&aWeiter'
```

Texte für das Erstellen einer neuen Auktion in der GUI.

```yaml
guiauction:
  yourauction:
    name: '&aDeine Auctionen'
    lore: '&7Deine Auctionen anzeigen'
    lorenull: '&cDu hast keine Auctionen'
  sort:
    name: '&aSortierung'
    lore:
      newestfirst: '&7Neuste Auctionen zuerst'
      blocktype: '&7Nach Blocktypen'
      soonend: '&7Bald endende Auctionen zuerst'
  newauction:
    name: '&7Item ausstellen'
    lore:
      itemnull: '&cBitte halte das Item in der Hand'
      item: '&aItem ausstellen'
  wonauction:
    name: '&7Deine gewonnen Auctions:'
```

Texte für verschiedene Abschnitte der Auktionen-GUI, einschließlich der Anzeige eigener Auktionen, Sortieroptionen und gewonnener Auktionen.

```yaml
auctionlore:
- '&a'
- '&7Gebotsbetrag: %bid%'
- '&7Sofort-Kauf: %buyprice%'
- '&b'
- '&7Verkäufer: %seller%'
- '&c'
- '&7End: %end%'
```

Beschreibung eines Auktionsgegenstands in der GUI. Platzhalter werden durch die jeweiligen Werte ersetzt.

```yaml
guititle:
  main: '&6Auctions'
  bid: '&6Bid...'
  buynow: '&6Buy now...'
  yourauction: '&6Your Auctions'
  setbuyprice: '&6Set buyprice'
  setstartbid: '&6Set start bid'
  wonauctions: '&6Won auctions'
```

Titel der verschiedenen GUI-Fenster.

```yaml
guibuynow:
  infoname: '&aWillst du den Plot für %money% kaufen?'
  'yes': '&aJa'
  'no': '&cNein'
```

Texte für das Sofortkauf-Fenster in der GUI.

```yaml
messages:
  noperm: '&cDazu hast du keine Rechte.'
  someoneisinbid: '&cJemand ist bereits für dieses Item am bieten!'
  someoneisinbuy: '&cJemand hat bereits das Kauffenster offen!'
  notenoughmoney: '&cDu hast nicht genügend Geld, du brauchst %money%!'
  toolow: '&cDu musst mindestens %bid% bieten!'
  bid: '&aDu hast erfolgreich %bid% geboten!'
  yourownauction: '&cDas ist deine eigene Auction!'
  nobids: '&cEs hat keiner geboten, also kannst du es nicht verkaufen!'
  nobidsgetback: '&cDein Item konnte nicht verkauft werden, du hast es zurückerhalten!'
  yourauctionfinished: '&aEine Auction von dir wurde verkauft!'
  creatednewauction: '&aEine neue Auction wurde erstellt!'
  yourgetauction: '&aDu hast die Auction gewonnen und das Item wurde dir in dein Inv gelegt!'
  deletedauction: '&cAuction wurde gelöscht!'
  cooldownwait: '&cDu musst dich noch etwas gedulden!'
  maxreached: '&cDu hast DEIN maximum von Auctions erreicht!'
  notbought: '&cDu hast es nicht gekauft!'
  startbidishigherthanprice: '&cDer Startgebotspreis ist höher als der Verkaufspreis, Auction wurde nicht erstellt!'
  invfull: '&cDein Inventar ist zu voll!'
  broadcast:
    newauction: '&6%player% hat eine neue Auction gestartet.'
```

Nachrichten, die das Plugin an Spieler sendet. Diese können angepasst werden, um zu Deiner Serversprache und Deinem Stil zu passen.

***

Diese Konfigurationsoptionen bieten eine umfassende Kontrolle über das Auktionssystem, sodass Du das Plugin optimal auf die Bedürfnisse Deines Servers anpassen kannst.


# Beschreibung

Bringe Schwung auf deinen Server und biete deinen Spielern ein optisch ansprechendes Gadget mit fliegenden, hinterherlaufenden Luftballons, die über benutzerdefinierte Minecraft-Köpfe dargestellt werden.

{% hint style="success" %}
🎈 **Ein unterhaltsames kosmetisches Gadget für deine VIPs und Spieler!**
{% endhint %}

## Features

{% tabs %}
{% tab title="🎈 Ballon-Kosmetik" %}

#### Gadget-Features

* **Fliegende Ballons:** Ein Ballon schwebt in einer konfigurierbaren Höhe über dem Spieler und folgt diesem bei Bewegungen.
* **Custom Texturen (Heads):** Unterstützt jede Textur von [minecraft-heads.com](https://minecraft-heads.com) über deren Base64-Value.
* **Anleinen:** Der Ballon ist über ein optisches Seil (Leine) mit dem Spieler verbunden.
  {% endtab %}

{% tab title="⚙️ Customisierung" %}

#### Konfiguration

* **Individuelle Höhen:** Stelle die Flughöhe des Ballons flexibel ein.
* **Sound- & No-AI-Support:** Die Entitäten, die den Ballon halten, sind vollkommen lautlos (silent) und besitzen keine KI.
* **Erlaubte Mobs:** Definiere, welche Entitätstypen für das Halten des Ballons zugelassen sind (z. B. Kuh, Schwein).
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch.
{% endstep %}

{% step %}

#### Server starten & Konfiguration anpassen

1. Starte den Server einmal, damit die Standard-Dateien generiert werden.
2. Öffne die `/plugins/Ballon/config.yml` und trage deine gewünschten Ballons mit ihren Minecraft-Heads-Werten ein.
3. Starte den Server neu, um die Änderungen zu übernehmen.
   {% endstep %}
   {% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/ballon</code></td><td>Öffnet die Benutzeroberfläche zur Auswahl oder Entfernung des Ballons.</td><td><code>ballon.use</code></td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Passe die Flughöhe des Ballons, die zulässigen Träger-Entities, die Menünamen und deine Custom-Heads-Texturen flexibel in der `config.yml` an.

***

## Dateiübersicht

Das Plugin erstellt nach dem ersten Serverstart folgende Datei:

* **`plugins/Ballon/config.yml`**: Verwaltet alle Einstellungen, Systemnachrichten und das Ballon-Sortiment.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Einstellungen" %}

#### Allgemeine Optionen

```yaml
# Der Präfix vor Systemnachrichten
prefix: '&eBallon &7»'

# Name der GUI zur Ballon-Auswahl
guiname: '&eBallon &7»'

# Flughöhe des Ballons über dem Spieler (in Blöcken)
ballonhigh: '3.5'
```

{% endtab %}

{% tab title="👾 Entity-Steuerung" %}

#### Ballon-Träger-Entities

Da der Ballon per Leine (Leash) an einer unsichtbaren Entity befestigt wird, steuerst du hier deren Verhalten:

```yaml
# Deaktiviert das Spawnen jeglicher Entitäten
cancelspawnentitys: false

# Unterbindet das Anleinen von Entities
cancelfullleashspawnable: true

# Deaktiviert die Geräusche der Träger-Entities
silententity: true

# Der standardmäßige Entity-Typ des Trägers
entitytype: ZOMBIE

# Liste der erlaubten Entities für die Ballons
allowedentity:
- COW
- PIG
```

{% endtab %}

{% tab title="❌ Abbau-Item" %}

#### Ballon entfernen Option

```yaml
# Material des Items im Menü zum Entfernen des Ballons
remove.item: BARRIER
remove.shortid: '0'
remove.name: '&cBallon entfernen'
```

{% endtab %}
{% endtabs %}

***

## Eigene Ballon-Köpfe hinzufügen (`heads`)

Du kannst beliebig viele Köpfe als auswählbare Ballons im Menü auflisten. Es werden sowohl Spieler-Namen als auch Base64-Texturen (Custom Heads) unterstützt.

### Minecraft-Heads.com Texturen verwenden:

1. Suche dir einen Kopf auf [minecraft-heads.com](https://minecraft-heads.com) aus.
2. Kopiere das Feld **Value** (die lange Base64-Zeichenkette).
3. Füge sie in die Liste unter `heads` ein.

```yaml
heads:
# Format: SPIELERNAME/VALUE;MENÜ-DISPLAYNAME
- Dyroxplays;&cDyroxplays
- eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTZhMTA2YmQ3YzViZDNmZDA2ZDkwOGRmZjFjNzczMjVjNTIxZGM4NzM1YzAxYWFkZTc3N2YwNTY0MjFhZDkyOSJ9fX0=;&aCustom Head
```

***

## System- und Fehlermeldungen

```yaml
message.noperm: '&cDazu hast du keine Rechte.'
message.selected: '&aDu hast das Ballon %name% &aausgewählt.'
message.removed: '&aDein Ballon wurde entfernt.'
message.reloaded: '&aDie Config wurde reloaded.'
```


# Beschreibung

Ein ressourcenschonendes Spawner-System für CityBuild-Server, das passive Drops, Upgrades, Filter und anpassbare Erz-Generatoren bietet!

{% hint style="success" %}
💎 **Optimiere die Server-Performance und biete deinen Spielern ein einzigartiges Spawner-Upgrade-Erlebnis!**
{% endhint %}

## Übersicht

Das **BetterSpawner Plugin** revolutioniert das Spawner-System auf deinem Server. Anstatt Server-Ressourcen durch unzählige Entity-Spawns zu belasten, sammelt BetterSpawner die Drops passiv in einem virtuellen Inventar. Spieler können ihre Spawner upgraden, Filter anpassen und sogar eigene Erz-Generatoren craften.

{% hint style="info" %}
**Kompatibilität**

* ✅ **Minecraft-Versionen:** 1.8.8 - 1.21+ (alle Versionen)
* ✅ **Server-Software:** Spigot, Paper und alle Forks
* ✅ **PlotSquared:** Unterstützt v5, v6 und v7 (optional)
  {% endhint %}

## Features

{% tabs %}
{% tab title="⚡ Upgrades" %}

#### Spawner-Upgrades

* **Drop-Upgrades:** Verringere die Zeit (Sekunden) zwischen den passiven Drops (Stufe 0 bis 4).
* **Inventar-Upgrades:** Erhöhe den Speicherplatz für gesammelte Drops im Spawner-Menü (Stufe 0 bis 4).
* **XP-Upgrades:** Erhöhe die erhaltene Erfahrung (XP) beim Einsammeln der Drops (Stufe 0 bis 4).
  {% endtab %}

{% tab title="🧪 Filter-System" %}

#### Intelligente Filter

* **Erz- und Dropfilter:** Wandle Rohstoffe automatisch um (z.B. Erze direkt schmelzen oder Essen direkt braten).
* **Filter-Aktivierung:** Spieler können Filter einzeln ein- oder ausschalten, sobald diese freigeschaltet wurden.
  {% endtab %}

{% tab title="🛡️ Freigaben & Rechte" %}

#### Zugriffskontrolle

* **Sammlungs-Freigabe:** Bestimme, wer Items entnehmen darf (Nur der Besitzer, getrustete Plot-Spieler oder alle).
* **Einstellungs-Freigabe:** Bestimme, wer Upgrades kaufen und Einstellungen ändern darf.
* **Ortsbeschränkung:** Kann global erlaubt, auf bestimmte Welten limitiert oder strikt auf PlotSquared-Plots beschränkt werden.
  {% endtab %}

{% tab title="⛏️ Erz-Generatoren" %}

#### Custom Spawner & ORE-Generatoren

* **Umwandlung:** Mit craftbaren Items können normale Spawner in Erz-Generatoren umgewandelt werden.
* **Custom Rezepte:** Der 3x3-Crafting-Tisch für die Umwandlung-Items ist zu 100% konfigurierbar.
  {% endtab %}

{% tab title="🔧 Performance" %}

#### Ressourcenschonung

* **Passive Drops:** Spart massive CPU-Leistung und Client-FPS, da keine Mobs physisch gespawnt werden.
* **Stack on Spawn:** Falls der aktive Modus genutzt wird, können Mobs in einem konfigurierbaren Radius automatisch gestapelt werden.
  {% endtab %}
  {% endtabs %}

## Installation

{% stepper %}
{% step %}

#### Download & Platzieren

Lade das Plugin herunter und platziere die `.jar`-Datei im `plugins`-Ordner deines Servers.
{% endstep %}

{% step %}

#### Abhängigkeiten installieren

Stelle sicher, dass **Vault** und ein vaultfähiges Wirtschaftssystem (z. B. EssentialsX) installiert sind. Optional kannst du **PlotSquared** für plotbasierte Freigaben installieren.
{% endstep %}

{% step %}

#### Server neu starten

Starte den Server neu, damit das Plugin die Standardkonfiguration und den Ordner `/plugins/BetterSpawner/spawners/` generiert.
{% endstep %}

{% step %}

#### Konfiguration anpassen

Passe die `config.yml` und die Spawner-Dateien im `spawners`-Verzeichnis an deine Bedürfnisse an.
{% endstep %}
{% endstepper %}

### Abhängigkeiten

<table><thead><tr><th width="200">Komponente</th><th width="150">Status</th><th>Details</th></tr></thead><tbody><tr><td><strong>Spigot/Paper</strong></td><td>✅ Erforderlich</td><td>Minecraft 1.8.8 - 1.21+</td></tr><tr><td><strong>Vault</strong></td><td>✅ Erforderlich</td><td>Für die Wirtschaftsanbindung (Upgrades)</td></tr><tr><td><strong>PlotSquared</strong></td><td>📦 Optional</td><td>Für Plot-basierte Sicherheits- und Trustprüfungen (v5, v6, v7)</td></tr></tbody></table>

## Commands

* *Keine Befehle für normale Spieler erforderlich.* Alle Interaktionen finden direkt über das grafische Menü (GUI) durch Klicken auf den Spawner statt.

## Permissions

<table><thead><tr><th width="300">Permission</th><th>Beschreibung</th></tr></thead><tbody><tr><td><code>betterspawner.admin</code></td><td>Admin-Bypass: Zugriff auf alle Spawner, Entnahme aller Items, Einstellungs-Bypass.</td></tr><tr><td><code>betterspawner.use</code></td><td>Erlaubt das Nutzen und Umwandeln von normalen Spawnern in passive Spawner (wenn <code>permissionneededtouse</code> aktiviert ist).</td></tr><tr><td><code>betterspawner.bypass</code></td><td>Bypasst den Cooldown beim Wechsel zwischen normalem und passivem Modus.</td></tr><tr><td><code>betterspawner.destory</code></td><td>Erlaubt das Zerstören eines Spawners (bei aktivierter Zerstörungs-Einschränkung). <em>(Achtung: Schreibweise beachten!)</em></td></tr><tr><td><code>betterspawner.opupgrade</code></td><td>Erlaubt es Admins, die Spawner-Upgrades im GUI mit einem Klick sofort auf das Maximum zu setzen.</td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Hier findest du die Erklärung der Hauptkonfiguration (`config.yml`) sowie eine detaillierte Schritt-für-Schritt-Anleitung zur Erstellung eigener Spawner-Typen.

{% hint style="info" %}
**Tipp:** Nach Änderungen an der Konfiguration empfiehlt es sich, den Server neu zu starten, damit alle Spawner-Dateien und Rezepte korrekt geladen werden.
{% endhint %}

***

## Hauptkonfiguration (config.yml)

Die `config.yml` steuert das globale Verhalten des Plugins. Hier ist die vollständige Erklärung aller Sektionen:

### Allgemeine Einstellungen

```yaml
prefix: '&7[&6BetterSpawner&7]'  # Das Prefix vor allen Plugin-Nachrichten
backupLastEntryOfSpawnerymlonsave: true  # Sichert die Spawner-Datenbank vor jedem Speichern
permissionneededtouse: true  # Ob Spieler die Permission 'betterspawner.use' benötigen
keepupgrades.onswitch: true  # Behält Upgrades bei, wenn zwischen aktivem und passivem Modus gewechselt wird
placingabetterspawn: true  # Ob passive Spawner überhaupt platziert werden dürfen
forceasynctimemanager: true  # Nutzt einen asynchronen Zeitmanager zur Performance-Schonung
changemins: 300  # Cooldown in Minuten für den Wechsel des Spawner-Modus
```

### Spawner-Zerstörung (destory)

> \[!IMPORTANT] **Achtung zur Schreibweise:** In der Konfiguration und bei den Berechtigungen wird das Wort "destroy" als **`destory`** geschrieben!

```yaml
destory:
  onlywithpermission: false  # Nur Spieler mit der Permission 'betterspawner.destory' dürfen Spawner abbauen
  needpermission: false  # Ob generell eine Permission zum Zerstören benötigt wird
  havebeownerofspawner: false  # Wenn true, darf NUR der Besitzer des Spawners diesen wieder abbauen
```

### Einsatzbereiche (whereenable)

Bestimme, in welchen Welten oder Regionen das Plugin aktiv sein soll.

```yaml
whereenable:
  alloweverywhere: true  # Aktiviert das Plugin in allen Welten
  worlds:
    enablethisfeature: false  # Aktiviert die Welten-Blacklist/Whitelist
    onthelistenable: true  # Wenn true, ist das Plugin NUR in den Welten auf der Liste aktiv
    list:
      - world
  ONLYonplots: false  # Wenn true, können passive Spawner NUR auf Plots platziert werden
  onplots: true  # Erlaubt die Nutzung auf Plots generell
```

### Entity-Stapeln (stackonspawn)

Falls Spawner im aktiven Modus betrieben werden, können Entities gestapelt werden, um Laggs zu vermeiden.

```yaml
stackonspawn:
  enable: true  # Aktiviert das Stapeln von Entities
  radius: 8.0  # Suchradius für Mobs desselben Typs
  entityname: '&e%type% &fx%stack%'  # Namensanzeige über dem gestapelten Mob
  entitys:
    all: true  # Stapelt alle Mobs
    only:  # Falls 'all' auf false steht, werden nur diese Mobs gestapelt
      - ZOMBIE
      - PIG
  alloweverywhere: true  # Überall erlauben
  worlds:
    enablethisfeature: false
    onthelistenable: true
    list:
      - world
```

### Benutzeroberfläche & Texte (lore & guiname)

```yaml
lore:
  buy: '&7Kaufe jetzt für %price% $'
  bought: '&aGekauft'
  notreaced: '&7Du musst vorher die Items einzahlen und die vorherigen Stufen freischalten'
  havetobuyfilter: '&cDu musst davor den Filter erst kaufen'
  filteractivated: '&aAktiviert'
  filterdeactivated: '&cDeaktiviert'

guiname:
  active: '&7SpawnerMenu'
  main: '&7BetterSpawner'
  settings: '&7BetterSpawner | Einstellungen'
  stuff: '&7BetterSpawner | ItemInventar'

confirminv:
  name: '&cBist du sicher?'
  accept: '&aKaufen'
  cancel: '&cAbbrechen'
```

***

## 🧟 Eigene Spawner-Typen erstellen

Die detaillierte Anleitung zur Erstellung deiner eigenen Spawner-Typen (z. B. Erz-Generatoren) inklusive einer Kopiervorlage für Config-Dateien findest du auf der folgenden Seite:

* 👉 [🧟 Eigene Spawner-Typen erstellen](/betterspawner/konfiguration/eigene-spawner)


# Eigene Spawner-Typen

Mit BetterSpawner kannst du völlig eigene Spawner-Typen (z. B. Erz-Generatoren wie ein Gold-Generator oder Diamanten-Generator) anlegen. Diese spawnen keine lebendigen Mobs, sondern generieren Items direkt in das interne Spawner-Inventar.

Um einen neuen Spawner-Typen zu registrieren, musst du eine Konfigurationsdatei im Ordner `/plugins/BetterSpawner/spawners/custom/` erstellen.

***

### Vollständige Kopiervorlage (`GOLD_GEN.yml`)

Erstelle eine Datei mit dem Namen `GOLD_GEN.yml` in `/plugins/BetterSpawner/spawners/custom/` und füge folgende Standard-Konfiguration ein:

```yaml
enable: true

# Das Umwandlungs-Item, mit dem Spieler einen normalen Spawner transformieren
resultitem:
  material: GOLD_INGOT
  name: '&eGold-Generator-Kern'
  lore:
    - '&7Klicke mit diesem Kern auf einen normalen Spawner,'
    - '&7um ihn in einen Gold-Generator zu verwandeln.'

# Das Crafting-Rezept für den Generator-Kern im 3x3 Gitter
crafting:
  ol:
    material: COBBLESTONE
  om:
    material: GOLD_INGOT
  or:
    material: COBBLESTONE
  ml:
    material: IRON_INGOT
  mm:
    material: NETHER_STAR
  mr:
    material: IRON_INGOT
  ul:
    material: COBBLESTONE
  um:
    material: GOLD_INGOT
  ur:
    material: COBBLESTONE

spawner:
  # Bestimmt die Drop-Berechnungsmethode (siehe Erklärung unten)
  isorefilters: true
  
  # Drop-Stufe 0 bis 4
  droplevel0:
    dropsecs: 20   # Droppt alle 20 Sekunden Items
    items:
      - "GOLD_INGOT;0;1;50"  # 50% Chance auf 1 Goldbarren
  droplevel1:
    dropsecs: 18
    items:
      - "GOLD_INGOT;0;1;65"
  droplevel2:
    dropsecs: 15
    items:
      - "GOLD_INGOT;0;1;80"
  droplevel3:
    dropsecs: 12
    items:
      - "GOLD_INGOT;0;1;95"
  droplevel4:
    dropsecs: 10
    items:
      - "GOLD_INGOT;0;2;100"  # 100% Chance auf 2 Goldbarren

  # XP-Stufe 0 bis 4 (Erfahrungspunkte pro Drop-Intervall)
  xplevel0:
    min: 1
    max: 3
  xplevel1:
    min: 2
    max: 4
  xplevel2:
    min: 3
    max: 5
  xplevel3:
    min: 4
    max: 6
  xplevel4:
    min: 5
    max: 8

  # Kosten für das Upgraden der Stufen
  # Format: "SLOT-NUMMER;MATERIAL;SHORTID;MENGE"
  upgrades:
    drop:
      0:
        to:
          1:
            - "35;GOLD_INGOT;0;32"  # Slot 35 im GUI, kostet 32 Goldbarren
      1:
        to:
          2:
            - "35;GOLD_INGOT;0;64"
      2:
        to:
          3:
            - "35;GOLD_BLOCK;0;8"
      3:
        to:
          4:
            - "35;GOLD_BLOCK;0;16"
    inv:
      0:
        to:
          1:
            - "35;CHEST;0;5"
      1:
        to:
          2:
            - "35;CHEST;0;10"
      2:
        to:
          3:
            - "35;CHEST;0;15"
      3:
        to:
          4:
            - "35;CHEST;0;20"
    xp:
      0:
        to:
          1:
            - "35;EXPERIENCE_BOTTLE;0;32"
      1:
        to:
          2:
            - "35;EXPERIENCE_BOTTLE;0;64"
      2:
        to:
          3:
            - "35;EXPERIENCE_BOTTLE;0;128"
      3:
        to:
          4:
            - "35;EXPERIENCE_BOTTLE;0;256"

  # Filter-Freischaltung für diesen Spawner
  # Wichtig: Der Schlüssel heißt "filer" (ohne 't' in der Mitte)
  # Format: "MATERIAL;SHORTID;PREIS;&aNAME;&7LORE1;&7LORE2"
  filer:
    buyitem: "GOLD_INGOT;0;64;&6Automatischen Sortierfilter kaufen;&7Sortiert Erze automatisch;&cKosten: 64 Goldbarren"
```

***

### Schritt-für-Schritt-Anleitung & Erklärung

{% stepper %}
{% step %}

#### Datei erstellen

Erstelle eine Textdatei mit dem Namen deines Spawner-Typs (z. B. `DIAMOND_GEN.yml`) im Verzeichnis `/plugins/BetterSpawner/spawners/custom/`.
{% endstep %}

{% step %}

#### Drop-System verstehen (`isorefilters`)

Das Plugin berechnet deine angegebenen Item-Chancen (`"MATERIAL;SHORTID;MENGE;CHANCE"`) auf zwei Arten:

* **`isorefilters: true` (Zufallspool / empfohlen für Erz-Spawner):** Das Plugin würfelt bei jedem Intervall **exakt ein einziges** Item aus der Liste aus. Die Chancen verhalten sich wie Gewichte. Wenn die Summe aller Chancen (z. B. 40% Gold, 30% Eisen = 70%) unter 100% liegt, werden die restlichen 30% mit "Nichts" (Luft) befüllt – in 30% der Fälle droppt der Spawner also gar nichts.
* **`isorefilters: false` (Unabhängige Einzelwürfe / empfohlen für Mobs):** Jedes eingetragene Item wird **separat** gewürfelt. Wenn du drei verschiedene Materalien mit je 50% einträgst, kann es passieren, dass alle drei Items gleichzeitig generiert werden, nur zwei, eins oder keines.
  {% endstep %}

{% step %}

#### Rezept-Positionen anpassen

Trage unter `crafting` die Materialien für das 3x3-Gitter des Werkbank-Rezepts ein. Die zweistelligen Kürzel stehen für:

* `ol` = oben links | `om` = oben mitte | `or` = oben rechts
* `ml` = mitte links | `mm` = mitte mitte | `mr` = mitte rechts
* `ul` = unten links | `um` = unten mitte | `ur` = unten rechts
  {% endstep %}

{% step %}

#### Upgrades und Filter definieren

* **Upgrades**: Trage für die Kategorien `drop` (Menge/Tempo), `inv` (Inventargröße) und `xp` (Erfahrungspunkte) die Upgrade-Materialien ein. Stelle sicher, dass die Slotnummer (z. B. `35`) im GUI frei ist.
* **Filter-Freischaltung**: Verwende zwingend den fehlerhaften Config-Schlüssel **`filer`** (ohne `t`) und das Unterelement `buyitem`, damit das Sortierfeature für diesen Spawner erworben werden kann.
  {% endstep %}

{% step %}

#### Änderungen laden

Da das Plugin über keinen In-Game-Reloadbefehl verfügt, musst du den Minecraft-Server **neu starten**, damit der neue Spawner-Typ registriert wird.
{% endstep %}
{% endstepper %}

***

### In-Game Nutzung für Spieler

1. Der Spieler craftet das Umwandlungs-Item an der Werkbank anhand des definierten `crafting`-Rezepts.
2. Der Spieler macht einen Rechtsklick mit diesem Item in der Hand auf einen bereits platzierten, normalen Spawner.
3. Der Spawner verwandelt sich in den neuen Typ (z. B. Gold-Generator) und beginnt, gemäß des eingestellten Intervalls (`dropsecs`) Items in sein internes Menü zu generieren.


# Vorgefertigte Dateien

Hier findest du einige vorgefertige Dateien für das Plugin: Betterspawner

{% hint style="info" %}
Es wird empfohlen: Nutze die neuste Version, wenn diese auf deinem Server nicht geht, gehe immer Schritt für Schritt eins runter.
{% endhint %}

### Neuste Version

{% file src="/files/FAzM1MCTPmwCP0TA7icJ" %}

### Bis zur Version 1.19

{% file src="/files/fiuBhDCoHzoBNmdUetAI" %}

### Ältere Versionen

{% file src="/files/lRHhS5yCXZR9Ykiuwo5R" %}


# Beschreibung & Kit-Infos

Ein dynamisches BuildFFA-Plugin mit einem automatischen Kartenwechsel-System, Perks, einem integrierten Shop-System und voller MySQL-Unterstützung.

{% hint style="success" %}
🧱 **Biete deinen Spielern actionreiche Kämpfe mit anpassbaren Kits, Blöcke-Perks und Items!**
{% endhint %}

## Features

{% tabs %}
{% tab title="🗺️ Welten & Maps" %}

#### Map-Management

* **MultiMaps:** Unterstützung für beliebig viele Maps zur Steigerung der Abwechslung.
* **Automatischer Map-Wechsel:** Maps wechseln vollautomatisch nach einer in der Config festgelegten Zeit.
* **Forcemap-Befehl:** Admins können die aktuelle Karte sofort per Befehl überspringen und wechseln.
  {% endtab %}

{% tab title="🔮 Perks & Shop" %}

#### Ingame-Vorteile

* **Perks:** Stick-Perks und Blöcke-Perks erweitern die Fähigkeiten der Spieler im Kampf.
* **Währungsshop:** Kaufe mächtige Items wie Enderperlen, Rettungsplattformen und Enterhaken (erfordert Vault).
* **Inventar-Sortierung:** Spieler können die Anordnung ihrer Items im Kit mit `/invsort` frei anpassen.
  {% endtab %}

{% tab title="📊 Stats & Technik" %}

#### Verwaltung

* **MySQL-Schnittstelle:** Persistente Speicherung der Statistiken und Anbindung einer Top-10-Wand.
* **Lobby-Addon:** Zeigt die Spielerstatistiken bei Bedarf bereits in der Server-Lobby an.
* **PlaceholderAPI Support:** Kompatibel mit Platzhaltern wie `%buildffa_map%`, `%buildffa_kills%`, `%buildffa_deaths%` und `%buildffa_kd%`.
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation & Abhängigkeiten

Lade die `.jar`-Datei in den `plugins`-Ordner deines Servers. Stelle sicher, dass **Vault** und ein Economy-Plugin auf dem Server vorhanden sind.
{% endstep %}

{% step %}

#### Maps & Positionen einrichten

1. Definiere die Spawnpunkte deiner Maps im Spiel mit: `/buildffa setspawn <MapName>`.
2. Bestimme die Todeshöhe (unterhalb derer Spieler sterben) mit: `/buildffa setdeath <MapName>`.
3. Setze die maximale Bauhöhe (über der keine Blöcke platziert werden können) mit: `/buildffa setbuild <MapName>`.
4. Definiere die erste Karte, die beim Serverstart geladen werden soll: `/buildffa startmap <MapName>`.
   {% endstep %}

{% step %}

#### Standard-Kit einrichten

1. Rüstung und Inventar so ausrüsten, wie das Standard-Startkit sein soll (Kits sollten Blöcke und Sticks für Perks sowie eine Enderperle für den Shop enthalten).
2. Führe `/savekit` aus (erfordert `buildffa.admin`), um das Kit global für alle Spieler zu speichern.
   {% endstep %}
   {% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/build</code></td><td>Aktiviert oder deaktiviert den Admin-Baumodus (Blöcke verschwinden nicht).</td><td><code>buildffa.build</code></td></tr><tr><td><code>/buildffa setspawn &#x3C;map></code></td><td>Setzt den Spawnpoint für eine Map.</td><td><code>buildffa.admin</code></td></tr><tr><td><code>/buildffa setdeath &#x3C;map></code></td><td>Setzt die Todes-Grenze (Y-Koordinate) für eine Map.</td><td><code>buildffa.admin</code></td></tr><tr><td><code>/buildffa setbuild &#x3C;map></code></td><td>Setzt die Bauhöhen-Grenze (Y-Koordinate) für eine Map.</td><td><code>buildffa.admin</code></td></tr><tr><td><code>/buildffa startmap &#x3C;map></code></td><td>Legt die Startmap nach dem Server-Reboot fest.</td><td><code>buildffa.admin</code></td></tr><tr><td><code>/forcemap</code></td><td>Wechselt die Map sofort zur nächsten verfügbaren Karte.</td><td><code>buildffa.admin</code></td></tr><tr><td><code>/savekit</code></td><td>Speichert das aktuelle Inventar des Admins als globales Kit.</td><td><code>buildffa.admin</code></td></tr><tr><td><code>/settopwall &#x3C;1-10></code></td><td>Setzt ein Schild/Kopf-Paar für die Top-10-Wand.</td><td><code>buildffa.admin</code></td></tr><tr><td><code>/stats (Spieler)</code></td><td>Zeigt die aktuellen Kills, Deaths und KD-Stats an.</td><td>-</td></tr><tr><td><code>/invsort</code></td><td>Öffnet das GUI zur individuellen Inventar-Sortierung.</td><td>-</td></tr><tr><td><code>/top</code></td><td>Öffnet die Top-10-Bestenliste in einem GUI-Menü.</td><td>-</td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Passe die MySQL-Anbindung, die Coin-Belohnungen, das Scoreboard, das Chatformat sowie die kompletten Perk- und Shop-Items des **BuildFFA**-Plugins flexibel in der `config.yml` an.

***

## Dateiübersicht

Das Plugin erstellt nach dem ersten Serverstart folgende Datei:

* **`plugins/BuildFFA/config.yml`**: Verwaltet alle Spielmodi, Shop-Gegenstände, Welteneinstellungen und Nachrichten.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Einstellungen" %}

#### Spielmechaniken & Münzen

```yaml
# Der Präfix vor Systemnachrichten im Chat
prefix: '&eBuild&bFFA'

# Spielmechaniken-Schalter
mapchaning: true # Automatischer Kartenwechsel
mapchaningminutes: 30 # Wechselt die Karte alle 30 Minuten
healonkill: true # Vollständige Heilung bei Kills
forcenewscoreboard: true # Erzwingt die Scoreboard-Erstellung

# Coin-Einstellungen
coins:
  kill: 10 # Belohnung pro Kill
  death: 0 # Belohnung/Abzug bei Tod
```

{% endtab %}

{% tab title="🗄️ MySQL" %}

#### Datenbank-Optionen

```yaml
MYSQL:
  host: localhost
  port: '3306'
  username: user
  database: db
  password: password123
```

* **MySQL**: Die Zugangsdaten werden für die Speicherung der Kills, Tode, Rekorde und erworbenen Perks/Items der Spieler genutzt.
  {% endtab %}

{% tab title="🎨 UI & Scoreboard" %}

#### Scoreboard- & Menü-Optionen

```yaml
invsortname: '&eInvsortierung'
top10inv: '&eTop 10 Players'

# Scoreboard Sidebar
scoreboard: true
scoreboardtitel: '&eBuild&bFFA'
scoreboardspalten:
- '&a'
- '&b'
- '&7Map: &e%buildffa_map%'
- '&c'
- '&7Kills: &e%buildffa_kills%'
- '&d'
- '&7Online: %online%'
- '&e'
```

{% endtab %}

{% tab title="💬 Chatformat" %}

#### Chat-Optionen

```yaml
chatformat:
  use: true # Eigenes Chatformat aktivieren
  normal: '&e%player%: %msg%'
```

{% endtab %}
{% endtabs %}

***

## Shop & Perks (`items`)

Im Bereich `items` kannst du alle kaufbaren Blöcke, Knockback-Stöcke und Spezial-Items (z. B. Enterhaken, Rettungsplattformen) definieren.

### Konfigurations-Beispiel:

```yaml
perks:
  main: '&ePerks'
  stick: '&7Wähle deinen Stick aus'
  blocks: '&7Wähle deinen Block aus'
shop:
  name: '&eShop'
  lore:
    price: '&7Preis: &e%coins% Coins'
    select: '&aAusgewählt'
    bought: '&7Gekauft'

items:
  perks:
    main: # Perk-Kategorieauswahl
      stick:
        material: STICK
        name: '&7Stickauswahl'
        slot: 11
      blocks:
        material: SANDSTONE
        name: '&7Blockauswahl'
        slot: 15
        
    blocks: # Block-Perks
      RED_SANDSTONE:
        material: RED_SANDSTONE
        name: '&7RED_SANDSTONE'
        slot: 0
        coins: 10
      PRISMARINE:
        material: PRISMARINE
        name: '&7PRISMARINE'
        slot: 1
        coins: 10
        
    stick: # Stick-Perks (mit Verzauberungen)
      FEATHER:
        material: FEATHER
        name: '&7FEATHER'
        ench:
        - KNOCKBACK:1
        slot: 0
        coins: 10
        
  spawn: # Items, die Spieler am Spawn erhalten
    shop:
      material: NETHER_STAR
      name: '&eShop'
      slot: 7
    invsort:
      material: CHEST
      name: '&eInvsort'
      slot: 5
      
  shop: # Spezialgegenstände im Shop
    enderperle:
      material: ENDER_PEARL
      coins: 8
      slot: 10
    rettungsplattform:
      material: BLAZE_ROD
      name: '&6Rettungsplattform'
      coins: 9
      slot: 13
    enterhaken:
      material: FISHING_ROD
      name: '&5Enterhaken'
      coins: 10
      slot: 16
```

***

## Systemnachrichten

```yaml
message:
  join: '&e%player% joined.'
  leave: '&c%player% leaved.'
  death: '&c%player% ist gestorben.'
  killed: '&c%player% wurde von %killer% getötet.'
  notenoughmoney: '&cDu hast nicht genügend Coins, du brauchst mind. %price%!.'
  killstreak: '&e%player% &ahat einen &e%killstreak%er &aKillStreak!'
  invsortnothere: '&cDu kannst nur am Spawn deinen Inv sortieren!.'
  mapnotexist: '&c%map% existiert nicht.'
  startmapset: '&a%map% wurde als Startmap festgelegt.'
  invsaved: '&aDein Inventar wurde gespeichert.'
  savekit: '&aKit wurde gespeichert.'
  spawnset: '&aSpawn für %map% wurde auf deine aktuelle Location gesetzt.'
  invset: '&aInventar für %map% wurde gesetzt.'
  deathset: '&aTodeshöhe für %map% wurde gesetzt.'
  newmap: '&aEs wird nun auf &e%map% gespielt.'
  buildset: '&aDie Höhe wurde auf deine Location gesetzt, ab hier und drunter kann man bauen.'
  build:
    acitivated: '&aBuildmode wurde für dich aktiviert.'
    deacitivated: '&cBuildmode wurde für dich deaktiviert.'
  serverkick:
    full: '&cServer ist full, kaufe dir Plugins auf dyroxplays.de lol'
    kickedpremium: '&cDu wurdest von einem Premium-Spieler gekickt, kaufe dir Plugins auf dyroxplays.de lol'
    fullfull: '&cServer ist full'
  forcemap:
    usage: '&cNutze: /forcemap <Mapname>'
    mapnotexit: '&c%map% existiert nicht'
    error: '&cKonnte nicht forcemappen, evtl wird aktuell auf der Map gespielt oder der letzte Forcemap ist nicht länger als 1 Minute her.'
  noperm: '&cDazu hast du keine Rechte.'
  help: '&e/buildffa setspawn <MapName> &7- Setzt den Spawn für die Map%n%&e/buildffa setdeath <MapName> &7- Setzt die Respawn Höhe für die Map%n%&e/buildffa setbuild <MapName> &7- Setzt die Bauhöhe%n%&e/buildffa startmap <MapName> &7- Setzt Map als Anfangsmap ein%n%&e/forcemap <MapName> &7- Map wechseln auf Mapname%n%&e/settopwall <Rank> &7- Setzt die TopWand%n%'

# /stats Statistiken-Format
stats:
- '&eStats von %player%'
- '&fKills: %kills%'
- '&fDeaths: %deaths%'
- '&fK/D: %kd%'
- '&fRang: %rang%'
```


# Beschreibung

Verkaufe In-Game-Rechte (Permissions), Berechtigungs-Pakete (Packs) oder ganze Ränge bequem per GUI-Menü – entweder über In-Game-Geld oder ein integriertes Token-System.

{% hint style="success" %}
🛍️ **Biete deinen Spielern eine EULA-konforme Möglichkeit, Ränge und Rechte über Aktivität oder Spielwährung zu erwerben!**
{% endhint %}

## Features

{% tabs %}
{% tab title="🛍️ Verkauf & Ränge" %}

#### Berechtigungs-Verkauf

* **Permissions & Packs:** Verkaufe einzelne Rechte oder ganze Pakete (mehrere Permissions gleichzeitig).
* **Ränge & Gruppen:** Verkaufe zeitbasierte oder permanente Ränge direkt im Spiel.
* **Bestätigungsfenster:** Schutz vor Fehlkäufen durch ein integriertes Bestätigungs-GUI.
* **Mehrseitiges Menü:** Unterstützung für unbegrenzte Seiten zur übersichtlichen Strukturierung.
  {% endtab %}

{% tab title="🪙 Währungs-Optionen" %}

#### Bezahl-Methoden

* **Vault-Währung:** Nutze das normale In-Game-Geld (Economy) deines Servers.
* **Eigenes Token-System:** Integrierte Token-Währung, die per Befehl an Spieler vergeben oder entzogen werden kann (ideal als Event-Belohnung).
  {% endtab %}

{% tab title="🔌 Schnittstellen" %}

#### Berechtigungs-Systeme

Unterstützt alle gängigen Permissions-Plugins:

* **LuckPerms**
* **CloudNet (CPerms v2/v3)**
* **DKPerms**
* **PermissionsEx (PEX)**
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch.
{% endstep %}

{% step %}

#### Berechtigungs-Plugin wählen

1. Starte den Server, um den Ordner `/plugins/BuyPerms/` und die standardmäßige `config.yml` zu erstellen.
2. Wähle in der `config.yml` dein aktives Permissions-System (z. B. LuckPerms) und setze es auf `true`.
3. Passe deine Verkaufs-Items, Preise und Ränge in der Config an.
   {% endstep %}

{% step %}

#### Shop-NPC erstellen

1. Gehe im Spiel an die Position, an der der Shop-NPC stehen soll.
2. Führe `/setbuypermvillager` aus (erfordert `buyperm.setvillager`).
3. Ein Librarian-Villager ohne AI und unverwundbar wird gespawnt, den Spieler anklicken können.
   {% endstep %}
   {% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/buyperm [seite]</code></td><td>Öffnet das Verkaufs-Menü auf der angegebenen Seite.</td><td><code>buyperm.use</code></td></tr><tr><td><code>/buyperm reload</code></td><td>Lädt die Konfiguration und GUIs des Plugins neu.</td><td><code>buyperm.reload</code></td></tr><tr><td><code>/setbuypermvillager</code></td><td>Spawnt den Händler-Villager an deiner Position.</td><td><code>buyperm.setvillager</code></td></tr><tr><td><code>/token</code></td><td>Zeigt das eigene Token-Guthaben an.</td><td>-</td></tr><tr><td><code>/token &#x3C;Spieler></code></td><td>Zeigt das Token-Guthaben eines anderen Spielers an.</td><td><code>buyperm.seetokens</code></td></tr><tr><td><code>/token &#x3C;add/remove/set> &#x3C;Spieler> &#x3C;Anzahl></code></td><td>Fügt einem Spieler Tokens hinzu, zieht welche ab oder setzt das Guthaben.</td><td><code>buyperm.token</code></td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Hier findest du eine detaillierte Aufschlüsselung der Konfigurationsdatei für das **BuyPerms**-Plugin, mit der du das Verhalten, die Permissions, Preise und die GUI-Gestaltung anpassen kannst.

***

## Dateiübersicht

Das Plugin generiert nach dem ersten Serverstart folgende Hauptkonfigurationsdatei:

* **`plugins/BuyPerms/config.yml`**: Steuert alle Preise, Item-Definitionen, Sounds, MySQL-Zugänge und Plugin-Nachrichten.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Einstellungen" %}

#### Globale Optionen

```yaml
# Präfix vor Systemnachrichten im Chat
prefix: '&bBuyPerms &8»'

# Währungseinstellungen
usevault: false
enabletokencmd: true
starttokens: 0
```

* **`usevault`**: Wenn `true`, wird die Wirtschaft von Vault (In-Game Geld) verwendet. Wenn `false`, wird das integrierte Token-System genutzt.
* **`enabletokencmd`**: Aktiviert oder deaktiviert den Befehl `/token`.
* **`starttokens`**: Startguthaben an Tokens für Spieler bei ihrem ersten Serverbeitritt.
  {% endtab %}

{% tab title="🗄️ MySQL" %}

#### Datenbank-Optionen

```yaml
MYSQL:
  host: localhost
  port: '3306'
  username: user
  database: db
  password: password123
```

* Trage hier deine MySQL-Zugangsdaten ein, um die Tokenbestände der Spieler über mehrere BungeeCord-Server hinweg zu synchronisieren.
  {% endtab %}

{% tab title="🎵 Sounds & Items" %}

#### Sound- & Admin-Item-Einstellungen

```yaml
sound:
  openinv: BLOCK_CHEST_OPEN
  buy: ENTITY_PLAYER_LEVELUP
  cancel: BLOCK_ANVIL_BREAK

adminitems:
  accept: ARROW
  cancel: BARRIER
  placeholder: LIGHT_BLUE_STAINED_GLASS_PANE
  nopage: BARRIER
  previewpage: ARROW
  nextpage: ARROW
```

* **`sound`**: Bestimmt die zu spielenden Bukkit-Sounds bei GUI-Aktionen.
* **`adminitems`**: Legt die Item-Materialien fest, welche für die Steuerung im GUI (Kaufbestätigung, Navigation) angezeigt werden.
  {% endtab %}
  {% endtabs %}

***

## Berechtigungs-Systeme

Das Plugin unterstützt verschiedene Permission-Systeme. Setze das von dir genutzte System auf `true` und die restlichen auf `false`.

```yaml
permissionsystem:
  permissionsex: false
  luckperms: false
  cperms_cnv2: false
  cperms_cnv3: false
  dkperms: false
```

### Ausgeführte Befehle

Je nach dem oben ausgewählten System werden folgende Befehlsstrukturen verwendet, um Ränge/Permissions zuzuweisen:

```yaml
addpermcmd: pex user %player% add %perm% %extra%
addgroupcmd: pex user %player% group add %group% %extra%
setgroupcmd: pex user %player% group set %group% %extra%
```

***

## Verkaufs-Items (Shop-GUI)

Unter dem Key `items` kannst du deine verkaufbaren Berechtigungen und Ränge seiten- und slotbasiert konfigurieren.

```yaml
# Der Name des Hauptmenüs (unterstützt %token% als Währungsanzeige)
invname: '&bBuyPerm %token%'

items:
  '1': # Seite 1
    '0': # Slot 0 (Erstes Slot oben links)
      name: '&6XY Permission'
      mode: addpermcmd
      perm:
      - permission.xy
      price: 10
      item: ANVIL
      lore:
      - '&7Beschreibung Zeile 1'
      - '&7Beschreibung Zeile 2'
    '1': # Slot 1
      name: '&6Gruppe: Premium'
      mode: addgroupcmd
      group: Premium
      extra: lifetime
      price: 100
      item: GOLD_INGOT
      lore:
      - '&7Kaufe den Premium-Rang'
```

* **`mode`**: Bestimmt die Zuweisungs-Art. Mögliche Werte: `addpermcmd` (Einzelne Permission) oder `addgroupcmd` / `setgroupcmd` (Gruppen & Ränge).
* **`price`**: Preis in Tokens oder Vault-Geld (je nach `usevault` Einstellung).

***

## Systemnachrichten & GUI-Namen

```yaml
# Namen des Kauf-Bestätigungsmenüs
confirminv:
  name: '&cBist du sicher?'
  accept: '&aKaufen'
  cancel: '&cAbbrechen'

# Statusanzeigen auf den Items im Verkaufs-GUI
alreadyhasperm: '&aGekauft'
hasnotperm: '&cKaufe für %price%'

# Weitere Nachrichten
messages:
  configreloaded: '&aConfig reloaded.'
  buypermusage: '&cNutze: /buyperm <Page>'
  tokenusage: '&cNutze: /token <add/set/remove> <Player> <Amount>'
  tokenadded: '&a%player% wurden %token% Tokens hinzugefügt!'
  tokenchanged: '&aDeine Tokenanzahl hat sich verändert, du hast nun %token% Tokens!'
  tokenremoved: '&a%player% wurden %token% Tokens entfernt!'
  tokensetted: '&a%player% hat nun %token% Tokens!'
  yourtokens: '&aDu hast %token% Tokens!'
  playerstokens: '&a%player% hat %token% Tokens!'
  playernotfound: '&cSpieler konnte in der Datenbank nicht gefunden werden!'
  villagerspawned: '&aVillager wurde gespawnt.'
  noperm: '&cDazu hast du keine Rechte.'
  notenoughtokens: '&cDu hast nicht genügend Tokens/Geld.'
  bought: '&aDu hast die Permission: %name% gekauft.'
```


# Eigene Items & Ränge

In diesem Guide lernst du, wie du eigene kaufbare Berechtigungen (Permissions) und Ränge in der Shop-GUI deines **BuyPerms**-Plugins erstellst und konfigurierst.

***

## Grundlagen des Shop-GUI

Die Shop-GUI ist seiten- und slotbasiert aufgebaut. Du kannst für jede Seite das Layout und die kaufbaren Angebote genau bestimmen.

* **Seiten-Index:** Beginnt bei `1`. Du kannst unbegrenzt viele Seiten anlegen (`items.1`, `items.2` etc.).
* **Slot-Index:** Jede Zeile im Inventar hat 9 Slots (0-8 für Zeile 1, 9-17 für Zeile 2 usw.). Die maximal konfigurierbaren Slots hängen von der `guisize` in der `config.yml` ab.

***

## Konfigurations-Struktur

Jedes Verkaufs-Item wird in der `config.yml` unter dem Abschnitt `items` folgendermaßen deklariert:

```yaml
items:
  '<Page>':
    '<Slot>':
      item: 'MATERIALNAME'   # Minecraft-Material (z.B. GOLD_INGOT oder DIAMOND)
      name: 'Anzeigename'     # Anzeigename des Items im Menü
      price: 100             # Preis in Tokens (oder Geld, falls usevault=true)
      mode: 'MODUS'          # Zuweisungs-Modus (addpermcmd, addgroupcmd, setgroupcmd)
      
      # Modus-spezifische Keys (nur einer wird benötigt):
      perm:                  # Benötigt bei mode: addpermcmd
        - 'permission.name'  # Liste der zuzuweisenden Permissions
      group: 'Rangname'      # Benötigt bei mode: addgroupcmd / setgroupcmd
      extra: 'lifetime'      # Optionaler Parameter (z. B. Dauer oder Welt)
      
      lore:                  # Beschreibungstext des Items im Menü
        - '&7Zeile 1'
        - '&7Zeile 2'
```

***

## Die drei Kaufmodi

Das Plugin führt bei einem Kauf einen der vordefinierten Befehle aus der `config.yml` aus. Je nach gewähltem `mode` werden unterschiedliche Platzhalter ersetzt:

### 1. `addpermcmd` (Zuweisen von Permissions)

Vergibt eine oder mehrere Berechtigungen an den Spieler.

* **Ersetzter Befehl:** `%perm%` wird durch die Liste der Berechtigungen unter `perm` ersetzt. `%extra%` wird mit dem Wert aus `extra` befüllt.
* **Beispiel-Befehl:** `pex user %player% add %perm% %extra%`

### 2. `addgroupcmd` (Hinzufügen zu einer Gruppe/Rang)

Fügt den Spieler einer Rechtegruppe hinzu (z. B. als Zweitgruppe).

* **Ersetzter Befehl:** `%group%` wird durch den Wert unter `group` ersetzt. `%extra%` wird mit dem Wert aus `extra` befüllt.
* **Beispiel-Befehl:** `pex user %player% group add %group% %extra%`

### 3. `setgroupcmd` (Setzen eines Haupt-Rangs)

Überschreibt den aktuellen Rang des Spielers und setzt die neue Gruppe als Hauptgruppe.

* **Ersetzter Befehl:** `%group%` wird durch den Wert unter `group` ersetzt. `%extra%` wird mit dem Wert aus `extra` befüllt.
* **Beispiel-Befehl:** `pex user %player% group set %group% %extra%`

***

## Schritt-für-Schritt-Anleitung: Neuen Rang hinzufügen

Hier siehst du, wie du beispielsweise einen VIP-Rang für 500 Tokens zum Kauf anbietest.

{% stepper %}
{% step %}

#### Slot im GUI bestimmen

Wir wollen den VIP-Rang auf Seite **1** im Slot **20** (mittlere Reihe) platzieren.
{% endstep %}

{% step %}

#### Material & Namen festlegen

Als Symbol wählen wir ein `GOLD_INGOT`. Der Anzeigename soll in goldener Farbe erstrahlen: `&6&lVIP Rang`.
{% endstep %}

{% step %}

#### Preis & Modus konfigurieren

Der Preis beträgt `500` Tokens. Da es sich um eine Gruppen-Zuweisung handelt, setzen wir den Modus auf `addgroupcmd` und verweisen auf die Gruppe `VIP`. Als Extra-Parameter übergeben wir `lifetime` (für unbegrenzte Dauer).
{% endstep %}

{% step %}

#### YAML in config.yml eintragen

Füge folgenden Block unter `items` in deiner `config.yml` hinzu:

```yaml
items:
  '1':
    '20':
      item: GOLD_INGOT
      name: '&6&lVIP Rang kaufen'
      price: 500
      mode: addgroupcmd
      group: VIP
      extra: lifetime
      lore:
        - '&7Erhalte dauerhaften Zugriff'
        - '&7auf alle VIP-Vorteile!'
        - ''
        - '&7Preis: &e500 Tokens'
```

{% endstep %}
{% endstepper %}


# Beschreibung

### 📦 Im Shop erhältlich

{% embed url="<https://dyroxplays.de/product/caseopening>" fullWidth="false" %}

### 📦 Übersicht

CaseOpening ist ein umfangreiches Minecraft-Plugin, das ein vollständiges Case-Opening-System (Kisten-Öffnungs-System) für deinen Server bereitstellt. Spieler können verschiedene Cases öffnen, um zufällige Belohnungen zu erhalten.

### ✨ Hauptfeatures

#### 🎁 Case-System

* **Unbegrenzte Cases**: Erstelle beliebig viele verschiedene Cases mit individuellen Belohnungen
* **Case-Items**: Konfigurierbare Items mit Gewinnchancen und Belohnungen
* **Mobile Case-Opening**: Ermöglicht das Öffnen von Cases überall auf dem Server
* **Case-Blöcke**: Registriere physische Blöcke als Case-Opening-Stationen

#### 💎 Kristall-Währung

* **Virtuelles Währungssystem**: Integriertes Kristall-System als alternative Währung
* **Flexible Verwaltung**: Add, Remove, Set und Take Befehle für Kristalle
* **Spieler-Tracking**: Automatisches Speichern der Kristall-Bestände

#### 🎨 GUI-System

* **Main-GUI**: Übersichtsmenü für alle verfügbaren Cases
* **Preview-GUI**: Vorschau der möglichen Belohnungen vor dem Öffnen
* **Kristall-GUI**: Verwaltung der Kristalle über eine grafische Oberfläche
* **Komplett konfigurierbar**: Alle GUI-Elemente können angepasst werden

#### 🔧 Administration

* **Gruppen & Permissions**: Spezielle Belohnungen für bestimmte Gruppen oder Permissions
* **MySQL-Support**
* **Reload-System**: Konfigurationen ohne Server-Neustart neu laden
* **Premade-Konfigurationen**: Fertige Konfigurationen für verschiedene Minecraft-Versionen verfügbar

#### 🎯 Erweiterte Features

* **PlaceholderAPI**: Integration für Platzhalter in anderen Plugins
* **Vault-Integration**: Unterstützung für Economy und Permissions
* **PlotSquared-Support**: Kompatibilität mit PlotSquared-Plots
* **Sounds**: Akustische Effekte beim Öffnen

### 🗂️ Premade-Konfigurationen

Für einen schnellen Start stehen fertige Konfigurationen für verschiedene Minecraft-Versionen zum Download bereit:

* **Download-Link**:  [*Vorgefertigte Dateien*](/caseopening/vorgefertigte-dateien)
* **Inhalt**: Vollständig konfigurierte Cases, Items, Shop und GUI
* **Installation**: Einfach die Dateien in den `plugins/CaseOpening/` Ordner kopieren

***

### Placeholder - Platzhalter (PlaceholderAPI)

| Platzhalter               | Beschreibung                                                                             | Beispiel                         |
| ------------------------- | ---------------------------------------------------------------------------------------- | -------------------------------- |
| `%caseopening_crystals%`  | Gibt den aktuellen Kristallstand des Spielers aus.                                       | `150`                            |
| `%caseopening_kristalle%` | Alias für `%caseopening_crystals%`. Gibt ebenfalls den Kristallstand aus.                | `150`                            |
| `%caseopening_case_<id>%` | Gibt die Anzahl an Kisten aus, die der Spieler für die angegebene Kisten-`<id>` besitzt. | `%caseopening_case_epic%` -> `5` |

### �📋 Abhängigkeiten

***

#### Erforderlich

* **Vault**: Für Economy \[Vault funktioniert nur mit einem vaultfähigen Economy-System bspw. EsssentialsX]
* **Minecraft Server**: 1.8.8 bis neueste Version (Dyroxplays Updategarantie)
* **MySQL:** Für Datenbank-Speicherung

#### Optional

* **PlaceholderAPI**: Für erweiterte Platzhalter-Funktionen
* **PlotSquared**: Für Plot-Integration

### 🚀 Installation

{% stepper %}
{% step %}

### Herunterladen und Platzieren

Lade die neueste Version des Plugins herunter und platziere die `.jar`-Datei im `plugins`-Ordner deines Servers.
{% endstep %}

{% step %}

### Abhängigkeiten prüfen

Stelle sicher, dass **Vault** installiert ist und alle gewünschten optionalen Plugins (z. B. PlaceholderAPI, PlotSquared) vorhanden sind.
{% endstep %}

{% step %}

### Server neu starten

Starte den Server neu, damit das Plugin geladen und die Standard-Konfiguration erstellt wird.
{% endstep %}

{% step %}

### Konfiguration

Passe die Konfigurationen nach deinen Wünschen an (Cases, Items, GUIs, Währung, MySQL etc.).
{% endstep %}

{% step %}

### Optional: Premade installieren

Kopiere gegebenenfalls die Premade-Dateien in den `plugins/CaseOpening/` Ordner, um vordefinierte Cases, Shop und GUIs zu verwenden.
{% endstep %}
{% endstepper %}

### 📚 Dokumentations-Übersicht

* [**Befehle**](/caseopening/commands) - Vollständige Befehlsreferenz
* [**Permissions**](/caseopening/permissions) - Alle Berechtigungen im Überblick
* [**Konfiguration**](/caseopening/konfiguration) - Einstellungen und Config-Dateien
* [**Setup-Guide**](/caseopening/setup-guide) - Schritt-für-Schritt Einrichtung

### 🆘 Support

{% stepper %}
{% step %}

### Dokumentation prüfen

Überprüfe diese Dokumentation auf Hinweise und Lösungen.
{% endstep %}

{% step %}

### Logs prüfen

Prüfe die Server-Console auf Fehlermeldungen und sammle relevante Log-Informationen.
{% endstep %}

{% step %}

### Kontakt zum Support

Kontaktiere den Support und sende die gesammelten Log-Informationen zur Fehlerbehebung. <https://dyroxplays.de/support>
{% endstep %}
{% endstepper %}

### 📝 Lizenz

Dieses Plugin wurde von **Dyroxplays** entwickelt.

***

Hinweis: Diese Dokumentation bezieht sich auf die neueste Version des Plugins. Ältere Versionen können abweichende Features haben.


# Setup Guide

Eine Schritt-für-Schritt-Anleitung zur Einrichtung des CaseOpening-Plugins.

***

## Voraussetzungen

Bevor du startest, stelle sicher, dass folgendes vorhanden ist:

### ✅ Erforderlich

* **Minecraft Server** (Spigot, Paper, oder kompatibel)
  * Version: 1.8.8 bis neueste Version
  * Dyroxplays Updategarantie
* **Vault Plugin**
  * Download: <https://www.spigotmc.org/resources/vault.34315/>
* **Economy Plugin** (z.B. EssentialsX)
  * Für Kristall-Shop und Belohnungen
* **MySQL Datenbank**
  * Für große Server empfohlen

### 📦 Optional

* **PlaceholderAPI**
  * Download: <https://www.spigotmc.org/resources/placeholderapi.6245/>
  * Für erweiterte Platzhalter
* **PlotSquared**
  * Für Plot-Integration
  * Download: <https://www.spigotmc.org/resources/plotsquared-v7.77506/>
* **ItemEdit**
  * Für bessere Items bearbeiten (Name etc.)
  * Download: <https://www.spigotmc.org/resources/itemedit-1-8-x-1-21-x.40993/>

***

{% stepper %}
{% step %}

### Installation — Schritt-für-Schritt

#### Plugin herunterladen

1. Lade die neueste Version der `CaseOpening`herunter \[<https://panel.dyroxplays.de/downloads>]
2. In der Zip findest du 2 jars:
   1. Eine mit "1.13+" im Namen, diese Version nutzt du für alle Serverversionen, AB der 1.13 (und auch NUR diese jar nutzen, nicht beide!). D.h. auch für zB 1.21.10 nutzt du die "1.13+" jar.
   2. Für Server, die älter als 1.13 sind, also 1.8.8 - 1.12.2, nutzt du die Jar OHNE "1.13+" im Namen (und auch NUR diese jar nutzen, nicht beide!).
      {% endstep %}

{% step %}

#### Plugin installieren

1. Stoppe deinen Server
2. Platziere die richtige Jar im `plugins/` Ordner
3. Stelle sicher, dass **Vault** installiert ist (+ vaultfähiges Economy System)
4. Starte den Server
   {% endstep %}

{% step %}

#### Erste Überprüfung

1. Prüfe die Console auf Fehler
2. Gib `/plugins` ein - CaseOpening sollte grün sein
3. Im `plugins/CaseOpening/` Ordner wurden Config-Dateien erstellt

Beispiel-Meldungen in der Console:

```
[✓] CaseOpening v1.0 has been enabled!
[✓] Vault found and hooked!
[✓] PlaceholderAPI found and hooked!
```

{% endstep %}

{% step %}

#### Premade-Konfigurationen (Optional)

**💡 Schnellstart mit fertigen Konfigurationen**

Anstatt alles manuell zu konfigurieren, kannst du fertige Premade-Konfigurationen verwenden:

1. **Download**: Lade die Premades für deine Server-Version herunter
2. **Installation**:
   * Stoppe den Server
   * Kopiere die heruntergeladenen Dateien in `plugins/CaseOpening/`
   * Überschreibe die vorhandenen Config-Dateien
   * Starte den Server neu
3. **Fertig!** Alle Cases, Items und der Shop sind bereits konfiguriert

Hinweis: Die Premades enthalten 6 verschiedene Cases (Starter, Bronze, Silber, Gold, Diamant, Smaragd) mit vollständig konfigurierten Belohnungen und einem funktionierenden Shop-System.
{% endstep %}
{% endstepper %}

***

{% stepper %}
{% step %}

### Grundkonfiguration — Basis-Einstellungen anpassen

Öffne `plugins/CaseOpening/config.yml` und passe an:

```yaml
# Passe das Präfix an
prefix: "§8[§6CaseOpening§8] §7"
# Hex-Farben (1.16+)
```

{% endstep %}

{% step %}

### Grundkonfiguration — Nachrichten anpassen (Optional)

Öffne `plugins/CaseOpening/messages.yml` und passe Nachrichten an:

```yaml
prefix: "§8[§6§lCASE§8] §7"
case:
  opened: "%prefix%§aDu hast ein §e%case% §ageöffnet!"
  won: "%prefix%§aGlückwunsch! Du hast §e%item% §agewonnen!"
```

{% endstep %}

{% step %}

### Grundkonfiguration — Reload ausführen

Führe folgenden Befehl aus:

```
/case reload
```

{% endstep %}
{% endstepper %}

***

{% stepper %}
{% step %}

### Erstes Case erstellen — Case anlegen

Erstelle ein "Starter Case":

```
/case create starter 13 §6§lStarter Case
```

* `starter` = interner Name (keine Leerzeichen)
* `13` = Slot im GUI (Mitte)
* `§6§lStarter Case` = Anzeigename
  {% endstep %}

{% step %}

### Erstes Case erstellen — Case konfigurieren

```
/case edit starter price 50
/case edit starter maxAmount 100
/case edit starter material CHEST
/case edit starter addLore §7Ein einfaches Starter-Case
/case edit starter addLore §7mit grundlegenden Belohnungen
/case edit starter lootviewable true
```

{% endstep %}

{% step %}

### Erstes Case erstellen — Belohnungen hinzufügen

#### Item 1: Diamant (selten)

```
/caseitem create starter diamond 10 §bDiamanten
/caseitem edit starter diamond amount 5
/caseitem edit starter diamond material DIAMOND
/caseitem edit starter diamond addLore §75x Diamanten
/caseitem edit starter diamond firework true
```

#### Item 2: Gold (mittel)

```
/caseitem create starter gold 25 §6Goldbarren
/caseitem edit starter gold amount 16
/caseitem edit starter gold material GOLD_INGOT
/caseitem edit starter gold addLore §716x Goldbarren
```

#### Item 3: Eisen (häufig)

```
/caseitem create starter iron 65 §7Eisenbarren
/caseitem edit starter iron amount 32
/caseitem edit starter iron material IRON_INGOT
/caseitem edit starter iron addLore §732x Eisenbarren
```

{% endstep %}

{% step %}

### Erstes Case erstellen — Case testen

Gib dir Cases zum Testen:

```
/case add starter <DeinName> 10
```

Öffne das GUI:

```
/givemobilecaseopening
```

Rechtsklick mit dem Item → Öffne das Case!
{% endstep %}
{% endstepper %}

***

{% stepper %}
{% step %}

### Case-Blöcke einrichten — Block platzieren

Baue einen schönen Bereich für deine Cases:

```
□ □ □
□ ■ □  ← Platziere hier einen besonderen Block
□ □ □
```

Tipp: Nutze dekorative Blöcke wie:

* Ender Chest
* Chest
* Beacon
* Glowstone
  {% endstep %}

{% step %}

### Case-Blöcke einrichten — Block registrieren

Führe aus:

```
/registercaseblock
```

Klicke auf den Block → Wähle "starter" Case aus dem GUI

Erfolgsmeldung:

```
§aCase-Block wurde erfolgreich registriert!
```

{% endstep %}

{% step %}

### Case-Blöcke einrichten — Testen

Klicke auf den Block → Main-GUI öffnet sich!
{% endstep %}

{% step %}

### Case-Blöcke einrichten — Weitere Blöcke hinzufügen

Wiederhole die Schritte für weitere Cases:

```
/registercaseblock
→ Klicke auf Block A → Wähle "starter"
 /registercaseblock
→ Klicke auf Block B → Wähle "legendary"
```

#### Block entfernen

Falls du einen Fehler gemacht hast:

```
/unregistercaseblock
→ Klicke auf den Block
```

{% endstep %}
{% endstepper %}

***

## GUI anpassen

### Main-GUI personalisieren

Öffne `plugins/CaseOpening/mainGUI.yml`:

```yaml
# GUI-Größe ändern
size: 54

# Titel anpassen
title: "§6§l▶ §e§lCase Opening §6§l◀"

# Kristall-Anzeige Position
items:
  crystals:
    slot: 49
    item:
      displayname: "§b§l⬥ Deine Kristalle ⬥"
      lore:
        - "§7Du besitzt §b%crystals% §7Kristalle"
        - ""
        - "§eLinksklick §8» §7Kristall-Shop öffnen"

# Füllitems für besseres Design
fillitems:
  enabled: true
  item:
    material: GRAY_STAINED_GLASS_PANE
    displayname: " "
```

### Preview-GUI anpassen

Öffne `plugins/CaseOpening/previewGUI.yml`:

```yaml
title: "§e§l⚡ Vorschau: %case% ⚡"

# Öffnen-Button
open:
  slot: 53
  item:
    material: LIME_CONCRETE
    displayname: "§a§l✓ Case öffnen"
    lore:
      - "§7Klicke um das Case zu öffnen"
      - ""
      - "§eKosten: §6%price% §eKristalle"
      - "§7Dein Kontostand: §b%crystals% §7Kristalle"
```

Nach Änderungen:

```
/case reload
```

***

## Erweiterte Features

### Belohnungen mit Commands

Du kannst Items mit zusätzlichen Commands versehen:

```
/caseitem edit starter <ItemID> givecommands add lp user %player% parent add vip
/caseitem edit starter <ItemID> givecommands add eco give %player% 1000
/caseitem edit starter <ItemID> givecommands add tp %player% spawn
```

**Hinweis:** `<ItemID>` ist die Zahl des Items (1, 2, 3, ...)

### Broadcast für seltene Items

```
/caseitem edit starter <ItemID> broadcast §6§l★ §e%player% §7hat §c§l%item% §7gewonnen! §6§l★
```

Alle Spieler sehen diese Nachricht beim Gewinnen!

### Gruppen-Belohnungen

Öffne `plugins/CaseOpening/caseGroupRewards.yml`:

```yaml
groups:
  vip:
    commands:
      give:
        - "case add starter %player% 5"
        - "crystals add %player% 100"
      already-have:
        - "tell %player% §cDu bist bereits VIP!"
```

Verwendung:

```
/casegroupadd <Spieler> vip
```

### Permission-Belohnungen

Ähnlich wie Gruppen-Belohnungen in `casePermRewards.yml`.

***

{% stepper %}
{% step %}

### MySQL einrichten (Optional) — Datenbank erstellen

Verbinde dich mit deinem MySQL-Server:

```sql
CREATE DATABASE caseopening;
CREATE USER 'caseopening'@'localhost' IDENTIFIED BY 'sicheres_passwort';
GRANT ALL PRIVILEGES ON caseopening.* TO 'caseopening'@'localhost';
FLUSH PRIVILEGES;
```

{% endstep %}

{% step %}

### MySQL einrichten (Optional) — Config anpassen

Öffne `config.yml` und passe an:

```yaml
storage:
  type: mysql
  
  mysql:
    host: localhost
    port: 3306
    database: caseopening
    username: caseopening
    password: sicheres_passwort
    useSSL: false
```

{% endstep %}

{% step %}

### MySQL einrichten (Optional) — Server neu starten

```
/stop
```

Starte den Server → Tabellen werden automatisch erstellt!
{% endstep %}

{% step %}

### MySQL einrichten (Optional) — Überprüfung

Prüfe in deiner MySQL-Datenbank:

```sql
USE caseopening;
SHOW TABLES;
```

Sollte zeigen:

```
+------------------------+
| Tables_in_caseopening  |
+------------------------+
| caseopening_players    |
| caseopening_cases      |
| caseopening_crystals   |
+------------------------+
```

{% endstep %}
{% endstepper %}

***

## Permissions einrichten

### Spieler-Gruppe

Gib allen Spielern Zugriff auf das Case-System:

**Mit LuckPerms:**

```
/lp group default permission set caseopening.gui.main true
/lp group default permission set caseopening.gui.preview true
/lp group default permission set caseopening.shop.use true
```

### Admin-Gruppe

Gib Admins volle Rechte:

```
/lp group admin permission set caseopening.* true
```

### VIP-Cases

Erstelle exklusive Cases für VIPs:

```
/case create vipcase 14 §d§lVIP Case
/case edit vipcase permission caseopening.case.vipcase
/lp group vip permission set caseopening.case.vipcase true
```

***

## Troubleshooting

<details>

<summary>Problem: Plugin lädt nicht</summary>

Lösungen:

1. Prüfe ob Vault installiert ist: `/plugins`
2. Schaue in die Console nach Fehlern
3. Prüfe Server-Version (1.8.8 bis neueste)

</details>

<details>

<summary>Problem: Cases öffnen sich nicht</summary>

Lösungen:

1. Prüfe Permission: `caseopening.gui.main`
2. Prüfe Console-Logs auf Fehlermeldungen
3. Prüfe ob Case aktiviert ist: `/case edit <name> enable true`

</details>

<details>

<summary>Problem: Keine Belohnungen</summary>

Lösungen:

1. Prüfe ob Items definiert sind: Öffne `casesItem.yml`
2. Prüfe Chancen: Summe sollte > 0 sein
3. Teste mit `/caseitem getitem <case> <item>`

</details>

<details>

<summary>Problem: MySQL-Verbindung fehlgeschlagen</summary>

Lösungen:

1. Prüfe MySQL-Server Status
2. Teste Verbindungsdaten
3. Prüfe Firewall-Einstellungen

</details>

***

## Nächste Schritte

✅ **Setup abgeschlossen!** Hier sind weitere Ideen:

1. **Mehr Cases erstellen**
   * Daily Case (täglich 1 gratis)
   * Event Cases (zeitlich begrenzt)
   * Legendary Cases (sehr selten)
2. **Shop einrichten**
   * Kristalle gegen Geld verkaufen
   * Cases direkt kaufen
3. **Belohnungen erweitern**
   * Ränge als Belohnung
   * Teleports zu speziellen Orten
   * Custom Items mit Commands
4. **Community einbinden**
   * Events mit speziellen Cases
   * Wettbewerbe (wer öffnet die meisten?)
   * Vote-Belohnungen mit Kristallen

***

## Schnell-Referenz

### Wichtigste Befehle

```bash
# Case erstellen
/case create <name> <slot> <displayname>

# Item hinzufügen
/caseitem create <case> <itemid> <chance> <name>

# Cases vergeben
/case add <case> <spieler> <anzahl>

# Kristalle vergeben
/crystals add <spieler> <anzahl>

# Block registrieren
/registercaseblock

# Reload
/case reload
```

### Wichtigste Dateien

```
config.yml        → Haupteinstellungen & Nachrichten
caseshop.yml      → CaseShop-GUI
items.yml         → Allgemeine Items
previewgui.yml    → Preview-GUI-Layout
maingui.yml       → Main-GUI-Layout

casegroupadd.yml  → Alternative Commands für vorhandenem Rang-Vergabe
casepermadd.yml   → Alternative Coomands für vorhandenem Permission-Vergabe
```

### Support

Bei Fragen:

1. Prüfe diese Dokumentation
2. Aktiviere Debug-Modus
3. Prüfe Console-Logs
4. Kontaktiere den Support mit Logs

***

Viel Erfolg mit deinem Case-Opening-System! 🎁


# Konfiguration

Dieser Abschnitt erklärt alle Konfigurationsdateien und deren Optionen.

***

## Dateiübersicht

Das Plugin erstellt folgende Konfigurationsdateien im `plugins/CaseOpening/` Ordner:

```
plugins/CaseOpening/
├── config.yml              # Hauptkonfiguration & Nachrichten & Sprache
├── casesItem.yml          # Case-Items (Belohnungen)
├── mainGUI.yml            # Main-GUI Layout
├── previewGUI.yml         # Preview-GUI Layout
├── items.yml              # Wiederverwendbare Items
├── caseShop.yml           # Shop-Konfiguration
├── caseGroupRewards.yml   # Gruppen-Belohnungen
└── casePermRewards.yml    # Permission-Belohnungen
```

### 📥 Premade-Konfigurationen verwenden

Schnellstart ohne manuelle Konfiguration:

* **Download**: *\[Link wird bereitgestellt]*

Die folgenden Abschnitte beschreiben die manuelle Konfiguration der einzelnen Dateien.

***

## config.yml

Die Hauptkonfigurationsdatei des Plugins.

### Basis-Einstellungen

```yaml
# Plugin-Präfix für Nachrichten
prefix: '&7[&eCaseOpening&7]'

# Limit für Case-Animation
limit: 15

# Main-GUI Länge (Reihen: 1-6)
mainguilenght: 3

# Standard-Kristalle für neue Spieler
defaultcrystals: 0

# Broadcast bei 10% oder weniger Chance
won10percent: '&6%player% hat %name% gewonnen!'
```

### Sound-Einstellungen

```yaml
sound:
  # Sound beim Gewinnen
  win: ENTITY_PLAYER_LEVELUP;0.2;0.2
  
  # Sounds während Animation
  run1: BLOCK_COMPARATOR_CLICK;0.2;0.2
  run2: ENTITY_BAT_TAKEOFF;0.2;0.2
```

Format: `SOUND_NAME;Volume;Pitch`

### MySQL-Konfiguration

```yaml
MySQL:
  host: localhost
  port: '3306'
  username: xxusernamexx
  datebase: xxdatabasexx
  password: xxx
  tablename: caseopening_players
```

Hinweis: Um MySQL zu aktivieren, musst du diese Werte ausfüllen. Das Plugin erkennt automatisch ob MySQL konfiguriert ist.

### GUI-Namen

```yaml
guiname:
  main:
    name: '&eCaseOpening'
    size: 3  # Anzahl der Reihen (1-6)
  preview: '&6Mögliche Gewinne'
```

### Seltenheitsgrade

```yaml
seltenheitsgrad:
  '1': '&7Seltenheit: &4&l&kX&r &4&lGöttlich &k&lX'
  '5': '&7Seltenheit: &c&lMythisch'
  '10': '&7Seltenheit: &6Legendär'
  '25': '&7Seltenheit: &5Episch'
  '50': '&7Seltenheit: &9Selten'
  '75': '&7Seltenheit: &aNormal'
  '100': '&7Seltenheit: &7Häufig'
```

Diese werden automatisch basierend auf der Item-Chance angezeigt.

***

### ´Nachrichten

{% code expandable="true" %}

```yaml
messages:
  noperm: '&cDazu hast keine Rechte.'
  playernotonline: '&cDer Spieler &e%player% &cist nicht online!'
  error:
    keinitem: '&cDu hast kein Item in der Hand!'
    invfull: '&cDein Inventar ist voll!'
    offhand: '&cDu darfst in deiner linken Hand kein Item haben!'
    limit: '&cDu hast dein Limit erreicht, versuche es morgen nochmal!'
    wrongnumber: '&cDu musst eine Zahl zwischen %from% bis %to% eingeben!'
    casename: '&cCasename darf nur aus Buchstaben und Zahlen bestehen!'
    playercouldnotfound: '&cSpieler konnte in der Datenbank nicht gefunden werden!'
    onlyplayer: '&cNur Spieler können diesen Befehl nutzen.'
    case:
      notfound: '&cCase &e''%name%'' &cwurde nicht gefunden!'
    invalid_number: '&cUngültige Zahl angegeben.'
    caseitem:
      notfound: '&cCase-Item mit ID %id% nicht gefunden!'
      chance:
        invalid: '&cChance muss zwischen 0 und 100 liegen.'
      limit:
        invalid: '&cLimit muss eine gültige Zahl sein.'
      settype:
        usage: '&cNutze: /caseitem edit <CaseName> <ItemID> setType <item/cmd>'
        cmd:
          usage: '&cNutze: /caseitem edit <CaseName> <ItemID> setType cmd ...'
      edit:
        unknown: '&cUnbekannter Bearbeitungstyp.'
      get:
        usage: '&cNutze: /caseitem getitem <CaseName> <ItemID>'
  registercaseblock:
    success: '&aBlock erfolgreich als Case-Block registriert!'
    error:
      alreadyregistered: '&cDieser Block ist bereits als Case-Block registriert!'
    cancel: '&cRegistrierung wurde abgebrochen.'
    start: '&aKlicke auf einen Block, um ihn als Case-Block zu registrieren. &7(Rechtsklick
      zum Abbrechen)'
  unregistercaseblock:
    success: '&aBlock erfolgreich als Case-Block entfernt!'
    error:
      notregistered: '&cDieser Block ist nicht als Case-Block registriert!'
    cancel: '&cEntfernung wurde abgebrochen.'
    start: '&aKlicke auf einen Case-Block, um ihn zu entfernen. &7(Rechtsklick zum
      Abbrechen)'
  bought: '&aDu hast &e%amount% Cases &afür &e%name% &agekauft!'
  nothereplaceable: '&cEs gibt nichts zu ersetzen!'
  usage:
    case:
      help: |-
        &7================== &eCase Befehle &7==================
        &e/case add <Case> <Spieler/*/**> <Anzahl> &7- &fFügt Cases hinzu
        &e/case remove <Case> <Spieler/*/**> <Anzahl> &7- &fEntfernt Cases
        &e/case take <Case> <Spieler/*/**> <Anzahl> &7- &fAlias für remove
        &e/case set <Case> <Spieler/*/**> <Anzahl> &7- &fSetzt die Anzahl
        &7-----------------------------------------------------
        &e/case create <Name> <Slot> <DisplayName..> &7- &fNeue Case erstellen
        &e/case delete <Name> confirm &7- &fCase löschen
        &e/case edit <Name> <Aktion> ... &7- &fCase bearbeiten
        &7-----------------------------------------------------
        &e/case info <Spieler> &7- &fInfos über Cases eines Spielers
        &e/case reload &7- &fConfig neu laden
        &7=====================================================
      add: '&cNutze: /case add <Case> <Spieler/*/**> <Anzahl> ...'
      remove: '&cNutze: /case remove <Case> <Spieler/*/**> <Anzahl> ...'
      take: '&cNutze: /case take <Case> <Spieler/*/**> <Anzahl> ...'
      set: '&cNutze: /case set <Case> <Spieler/*/**> <Anzahl> ...'
      create: '&cNutze: /case create <Name> <Slot> <DisplayName..> ...'
      delete: '&cNutze: /case delete <Name> confirm ...'
      edit: '&cNutze: /case edit <Name> <Aktion> ...'
      info: '&cNutze: /case info <Spieler> ...'
      reload: '&cNutze: /case reload ...'
    casemsg: '&cNutze: /casemsg <Spieler> <Nachricht>'
    caseitem:
      help: |-
        &7================ &eCaseItem Befehle &7================
        &e/caseitem create <CaseName> <Chance%> <item/cmd> (<maxAmount>) &7- &fItem hinzufügen
        &e/caseitem edit <CaseName> <ItemID> <Aktion> ... &7- &fItem bearbeiten
        &e/caseitem getitem <CaseName> <ItemID> &7- &fItem ausgeben
        &e/caseitem clone <FromCase> <ItemID> <ToCase> &7- &fItem klonen
        &7======================================================
      create: '&cNutze: /caseitem create <CaseName> <Chance in %> <item/cmd> ...'
      edit: '&cNutze: /caseitem edit <CaseName> <ItemID> <Aktion> ...'
      getitem: '&cNutze: /caseitem getitem <CaseName> <ItemID> ...'
      clone: '&cNutze: /caseitem clone <FromCase> <ItemID> <ToCase> ...'
      delete: '&cNutze: /caseitem delete <CaseName> <ItemID> confirm'
    casebc: '&cNutze: /casebc <Nachricht> ...'
    createcmditem: '&cNutze: /createcmditem <Command ohne /> ...'
    registercaseblock: '&cNutze: /registercaseblock ...'
    unregistercaseblock: '&cNutze: /unregistercaseblock ...'
    givemobilecaseopening: '&cNutze: /givemobilecaseopening ...'
    casegroupadd: '&cNutze: /casegroupadd <Spieler> <Gruppe> ...'
    casepermadd: '&cNutze: /casepermadd <Spieler> <Permission> ...'
    crystals:
      help: |-
        &7================ &eCrystals Befehle &7================
        &e/crystals add <Spieler/*/**> <Anzahl> &7- &fFügt Crystals hinzu
        &e/crystals remove <Spieler/*/**> <Anzahl> &7- &fEntfernt Crystals
        &e/crystals take <Spieler/*/**> <Anzahl> &7- &fAlias für remove
        &e/crystals set <Spieler/*/**> <Anzahl> &7- &fSetzt die Anzahl
        &e/crystals info <Spieler> &7- &fZeigt Kristall-Info eines Spielers
        &7=====================================================
      add: '&cNutze: /crystals add <Spieler/*/**> <Anzahl>'
      remove: '&cNutze: /crystals remove <Spieler/*/**> <Anzahl>'
      take: '&cNutze: /crystals take <Spieler/*/**> <Anzahl>'
      set: '&cNutze: /crystals set <Spieler/*/**> <Anzahl>'
      info: '&cNutze: /crystals info <Spieler>'
  caseitem:
    usage: '&cNutze: /caseitem <SubCommand> ...'
    create:
      usage: '&cNutze: /caseitem create <CaseName> <Chance in %> <item/cmd> (<maxAmount>)'
      success:
        cmd: '&aCMD-Item erfolgreich erstellt &7(&aCase &e%name% &7(&aID: &e%id%&7))&a!
          &7[&6Klicke hier um Befehle hinzuzufügen&7]'
        item: '&aItem aus deiner Hand wurde zur Case &e%name% &7(&aID: &e%id%&7) &ahinzugefügt.'
      invalid-chance: '&cChance muss eine Zahl ...'
      invalid-type: '&cUngültiger Typ ...'
      invalid-amount: '&cMaxAmount muss eine gültige Zahl sein.'
      no-item: '&cDu hast kein Item in der Hand.'
      onlyplayer: '&cNur Spieler können diesen Befehl nutzen.'
    clone:
      success: '&aItem &e#%fromitemid% &avon Case &e%fromcase% &awurde erfolgreich
        zu Case &e%tocase% &ageklont! &7(Neue ID: &e%newitemid%&7)'
    delete:
      confirm: '&cBitte bestätige das Löschen von Item &e#%id% &caus Case &e%case%&c.'
    edit:
      chance:
        current: '&aAktuelle Chance für Item &e%itemid% &ain Case &e%casename%&a:
          &e%value%%'
        success: '&aChance für Item &e%itemid% &ain Case &e%casename% &aauf &e%value%%
          &agesetzt.'
        invalid: '&cChance muss eine Zahl zwischen 0 und 100 sein.'
      limit:
        current: '&aAktuelles Limit für Item &e%itemid% &ain Case &e%casename%&a:
          &e%value%'
        success: '&aLimit für Item &e%itemid% &ain Case &e%casename% &aauf &e%value%
          &agesetzt.'
        invalid: '&cLimit muss eine gültige Zahl sein.'
      setitemofhand:
        no-item: '&cDu hast kein Item in der Hand!'
        success: '&aItem &e%item% &awurde als Display-Item für &e%itemid% &ain Case
          &e%casename% &aübernommen.'
      settype:
        current: '&aAktueller Typ für Item &e%itemid% &ain Case &e%casename%&a: &e%value%'
        success: '&aTyp für Item &e%itemid% &ain Case &e%casename% &aauf &e%type%
          &agesetzt.'
        invalid: '&cUngültiger Typ! Nutze: item oder cmd'
      addcmd:
        notcmd: '&cDieser CaseItem-Typ ist kein CMD-Item!'
        usage: '&cNutze: /caseitem edit <Case> <ItemID> addcmd <Befehl>'
        success: '&aBefehl &e%command% &awurde zu Item &e%itemid% &ain Case &e%casename%
          &ahinzugefügt.'
      listcmd:
        notcmd: '&cDieser CaseItem-Typ ist kein CMD-Item!'
        empty: '&cKeine Befehle für Item &e%itemid% &cin Case &e%casename% &cvorhanden.'
        header: '&7--- &eBefehle für Item &e%itemid% &7in Case &e%casename% &7---'
        line: '&7[%index%] &f%command%'
        editbutton: '&e[✎]'
        removebutton: '&c[X]'
      removecmd:
        notcmd: '&cDieser CaseItem-Typ ist kein CMD-Item!'
        usage: '&cNutze: /caseitem edit <Case> <ItemID> removecmd <Index> confirm'
        confirm: '&cBitte bestätige das Entfernen des Befehls &e%command% &c(Index:
          %index%)'
        confirmbutton: '&a&l[BESTÄTIGEN]'
        success: '&aBefehl &e%command% &awurde von Item &e%itemid% &ain Case &e%casename%
          &aentfernt.'
        invalid: '&cUngültiger Index angegeben.'
      editcmd:
        notcmd: '&cDieser CaseItem-Typ ist kein CMD-Item!'
        usage: '&cNutze: /caseitem edit <Case> <ItemID> editcmd <Index> <Neuer Befehl>'
        current: '&aAktueller Befehl [%index%] für Item &e%itemid% &ain Case &e%casename%&a:
          &e%command%'
        success: '&aBefehl [%index%] für Item &e%itemid% &ain Case &e%casename% &aauf
          &e%command% &ageändert.'
        invalid: '&cUngültiger Index angegeben.'
  casebc:
    usage: '&cNutze: /casebc <Nachricht>'
  case:
    info:
      usage: '&cNutze: /case info <Spieler>'
      header: §e==========================
      footer: §e==========================
      playerinfo: '§ePlayerInfo: %player%'
      caseentry: '%casename%: %amount%'
      emptyline: ''
    create:
      usage: '&cNutze: /case create <Name> <Slot> <DisplayName..>'
      success: '&aCase &e''%casename%'' &aerfolgreich erstellt ...'
      error: '&cCase &e''%casename%'' &cexistiert bereits!'
    delete:
      usage: '&cNutze: /case delete <Name> confirm'
      confirm: '&cBitte bestätige das Löschen ...'
      success: '&aCase &e''%casename%'' &awurde erfolgreich gelöscht.'
      error: '&cCase &e''%casename%'' &cwurde nicht gefunden!'
    edit:
      usage: '&cNutze: /case edit <Name> <Aktion> <Wert>'
      displayname:
        current: '&aAktueller DisplayName für Case &e%casename%&a: &e%value%'
        success: '&aDisplayName für Case &e%casename% &aauf &e%value% &agesetzt.'
      amount:
        current: '&aAktuelle Anzahl für Case &e%casename%&a: &e%value%'
        success: '&aAnzahl für Case &e%casename% &aauf &e%value% &agesetzt.'
        wrongnumber: '&cDie Anzahl muss zwischen %from% und %to% liegen.'
      limit:
        current: '&aAktuelles Limit für Case &e%casename%&a: &e%value%'
        success: '&aLimit für Case &e%casename% &aauf &e%value% &agesetzt.'
        wrongnumber: '&cDas Limit muss eine gültige Zahl sein.'
      price:
        current: '&aAktueller Preis für Case &e%casename%&a: &e%value%'
        success: '&aPreis für Case &e%casename% &aauf &e%value% &agesetzt.'
        wrongnumber: '&cDer Preis muss eine gültige Zahl sein.'
      crystals:
        current: '&aCrystals aktiviert für Case &e%casename%&a: &e%value%'
        success: '&aCrystals für Case &e%casename% &aauf &e%value% &agesetzt.'
      material:
        current: '&aAktuelles Material für Case &e%casename%&a: &e%value%'
        success: '&aMaterial für Case &e%casename% &aauf &e%value% &agesetzt.'
        invalid: '&cUngültiges Material angegeben.'
      setitemofhand:
        only-player: '&cNur Spieler können diese Aktion ausführen.'
        no-item: '&cDu hast kein Item in der Hand!'
        success: '&aItem aus der Hand wurde für Case &e%casename% &aübernommen.'
      addlore:
        usage: '&cNutze: /case edit <Name> addlore <Text>'
        success: '&aLore-Zeile &e''%value%'' &awurde zu Case &e%casename% &ahinzugefügt.'
      removeloreline:
        empty: '&cCase &e%casename% &chat keine Lore-Zeilen.'
        header: '&7--- &eLore-Zeilen für Case &e%casename% &7---'
        removebutton: '&c[X] '
        line: '&7[%index%] &f%text%'
        suggestcommand: /case edit %caseid% removeloreline %index%
        success: '&aLore-Zeile &e%value% &awurde aus Case &e%casename% &aentfernt.'
        error: '&cUngültiger Zeilen-Index angegeben.'
      editeloreline:
        empty: '&cCase &e%casename% &chat keine Lore-Zeilen zum Bearbeiten.'
        header: '&7--- &eLore-Zeilen bearbeiten für Case &e%casename% &7---'
        editbutton: '&e[✎] '
        line: '&7[%index%] &f%text%'
        suggestcommand: /case edit %caseid% editeloreline %index% %text%
        usage: '&cNutze: /case edit <Name> editeloreline <Index> <Neuer Text>'
        success: '&aLore-Zeile &e%line% &awurde auf &e''%value%'' &ain Case &e%casename%
          &ageändert.'
        error: '&cUngültiger Zeilen-Index angegeben.'
      lightninground:
        current: '&aBlitz-Effekt für Case &e%casename%&a: &e%value%'
        success: '&aBlitz-Effekt für Case &e%casename% &aauf &e%value% &agesetzt.'
      enable:
        current: '&aCase &e%casename% &aist aktiviert: &e%value%'
        success: '&aCase &e%casename% &awurde auf &e%value% &agesetzt.'
      permission:
        current: '&aAktuelle Permission für Case &e%casename%&a: &e%value%'
        success: '&aPermission für Case &e%casename% &aauf &e%value% &agesetzt.'
      lootviewable:
        current: '&aLoot-Ansicht für Case &e%casename%&a: &e%value%'
        success: '&aLoot-Ansicht für Case &e%casename% &aauf &e%value% &agesetzt.'
      slot:
        current: '&aAktueller Slot für Case &e%casename%&a: &e%value%'
        success: '&aSlot für Case &e%casename% &aauf &e%value% &agesetzt.'
        wrongnumber: '&cDer Slot muss eine gültige Zahl sein.'
  success:
    caseitem:
      delete: '&aItem &e#%id% &awurde erfolgreich aus Case &e%case% &agelöscht!'
      chance: '&aChance erfolgreich gesetzt: %value%.'
      limit: '&aLimit erfolgreich gesetzt: %value%.'
      setitem: '&aItem aus der Hand wurde übernommen.'
      settype: '&aTyp erfolgreich gesetzt: %type%.'
      settypecmd: '&aCMD-Typ: %type% gesetzt, Befehl: %command%.'
      permission: '&aBenötigte Permission gesetzt: %value%.'
      showrarity: '&aShowRarity auf %value% gesetzt.'
      lootviewable: '&aLoot-Ansicht gesetzt auf: %value%.'
      broadcast: '&aBroadcast-Message gesetzt: %value%.'
      get: '&aDu hast das Item mit ID %id% erhalten.'
    updateplayerscases: '&a%player% hat nun &e%amount% &aCases von &e%name%&a.'
    updateplayerscasestarget: '&aDu hast nun &e%amount% &aCases von &e%name%&a.'
    allplayersupdated: '&aAlle Spieler wurden aktualisiert.'
    updateplayerscrystals: '&a%player% hat nun &e%amount% &aCrystals.'
    updateplayerscrystalstarget: '&aDu hast nun &e%amount% &aCrystals von &e%player%
      &aerhalten.'
  notenoughmoney: '&cDu hast nicht genügend Geld!'
  createcmditem:
    noitem: '&cDu hast kein Item in der Hand.'
    add: '&aBeim Rechtsklicken auf das Item wird nun der Befehl %cmd% ausgeführt.'
    usage: '&cNutze: /createcmditem <SubCommand> ...'
    help: |-
      &7================ &eCreateCMDItem Befehle &7================
      &e/createcmditem addcmd <Befehl> &7- &fBefehl zum Item hinzufügen
      &e/createcmditem listcmd &7- &fAlle Befehle des Items anzeigen
      &e/createcmditem removecmd <Index> confirm &7- &fBefehl entfernen
      &e/createcmditem editcmd <Index> <Neuer Befehl> &7- &fBefehl bearbeiten
      &7==========================================================
    addcmd:
      usage: '&cNutze: /createcmditem addcmd <Befehl>'
      noitem: '&cDu hast kein Item in der Hand!'
      success: '&aBefehl hinzugefügt: &e%command%'
    listcmd:
      noitem: '&cDu hast kein Item in der Hand!'
      header: '&7--- &eBefehle für Item in Hand ---'
      empty: '&cKeine Befehle für dieses Item vorhanden.'
      line: '&7[%index%] &f%command%'
      editbutton: '&e[✎] '
      removebutton: '&c[X] '
    removecmd:
      noitem: '&cDu hast kein Item in der Hand!'
      usage: '&cNutze: /createcmditem removecmd <Index> confirm'
      confirm: '&cBitte bestätige das Entfernen des Befehls &e%command% &c(Index:
        %index%)'
      confirmbutton: '&a&l[BESTÄTIGEN]'
      success: '&aBefehl entfernt: &e%command%'
      invalid: '&cUngültiger Index angegeben.'
      nocmds: '&cKeine Befehle zum Entfernen vorhanden.'
    editcmd:
      noitem: '&cDu hast kein Item in der Hand!'
      usage: '&cNutze: /createcmditem editcmd <Index> <Neuer Befehl>'
      current: '&aAktueller Befehl [%index%]: &e%command%'
      success: '&aBefehl [%index%] geändert zu: &e%command%'
      invalid: '&cUngültiger Index angegeben.'
      nocmds: '&cKeine Befehle zum Bearbeiten vorhanden.'
  crystals:
    info:
      emptyline: ''
      header: '&6&m========================================'
      playerinfo: '&eKristall-Info für &6%player%'
      amount: '&7Crystals: &e%amount%'
      footer: '&6&m========================================'
```

{% endcode %}

### Verfügbare Platzhalter

* `%player%` - Spielername
* `%casename%` / `%name%` - Case-Name
* `%amount%` - Anzahl
* `%value%` - Wert bei Edit-Befehlen
* `%item%` / `%itemid%` - Item-Name/ID

Hinweis: Alle Nachrichten befinden sich in der `config.yml`, nicht in einer separaten Datei.

***

## cases.yml

Definiert alle Cases und ihre Eigenschaften.

### Struktur

{% code expandable="true" %}

```yaml
cases:
  starter:
    # Anzeige-Einstellungen
    display:
      slot: 10
      material: CHEST
      displayname: "§6§lStarter Case"
      lore:
        - "§7Ein einfaches Starter-Case"
        - "§7mit grundlegenden Items"
        - ""
        - "§eKosten: §650 Kristalle"
        - "§eChance: §aHoch"
    
    # Preis in Kristallen
    price: 50
    
    # Maximale Anzahl pro Spieler (0 = unbegrenzt)
    maxAmount: 100
    
    # Aktiviert/Deaktiviert das Case
    enabled: true
    
    # Vorschau aktiviert
    lootviewable: true
    
    # Erforderliche Permission (optional)
    permission: ""
    
    # Effekte
    effects:
      # Blitz-Effekt beim Öffnen
      lightninground: false
      
      # Partikel werden nicht unterstützt
      # particle: FLAME
    
  legendary:
    display:
      slot: 16
      material: ENDER_CHEST
      displayname: "§c§lLegendary Case"
      lore:
        - "§7Ein seltenes legendäres Case"
        - "§7mit den besten Items"
        - ""
        - "§eKosten: §6500 Kristalle"
        - "§eChance: §cSehr Niedrig"
    
    price: 500
    maxAmount: 10
    enabled: true
    lootviewable: true
    permission: "caseopening.case.legendary"
    
    effects:
      lightninground: true
      # Partikel werden nicht unterstützt
      # particle: DRAGON_BREATH
```

{% endcode %}

***

## /casesItem (Beispielhaft bronze.yml)

Definiert alle Items (Belohnungen) in den Cases.

### Struktur

{% code expandable="true" %}

```yaml
# ##// Plugin Coded by Dyroxplays. \##

Cases:
  bronze:
    name: '&6&lBronze Kiste'
    slot: 11
    limit: -1
    price: 500
    lightninground: false
    enabled: true
    lootviewable: true
    amount: 1
    lore:
    - '&7Solide Belohnungen!'
    - '&7'
    - '&eDu hast &6%amount% &eKisten'
    material: ENDER_CHEST
    crystals: false
    permission: none

items:
  '1':
    chance: 50
    limit: -1
    displayIsWin: true
    display:
      material: DIAMOND
      amount: 4
      name: '&b&l4x Diamanten'
  '2':
    chance: 45
    limit: -1
    displayIsWin: true
    display:
      material: DIAMOND
      amount: 8
      name: '&b&l8x Diamanten'
  '3':
    chance: 35
    limit: -1
    displayIsWin: true
    display:
      material: DIAMOND
      amount: 12
      name: '&b&l12x Diamanten'
  '4':
    chance: 25
    limit: -1
    displayIsWin: true
    display:
      material: DIAMOND
      amount: 16
      name: '&b&l16x Diamanten'
  '5':
    chance: 45
    limit: -1
    displayIsWin: true
    display:
      material: GOLDEN_APPLE
      amount: 1
      name: '&6&l1x Goldapfel'
  '6':
    chance: 40
    limit: -1
    displayIsWin: true
    display:
      material: GOLDEN_APPLE
      amount: 3
      name: '&6&l3x Goldäpfel'
  '7':
    chance: 30
    limit: -1
    displayIsWin: true
    display:
      material: GOLDEN_APPLE
      amount: 5
      name: '&6&l5x Goldäpfel'
  '8':
    chance: 45
    limit: -1
    displayIsWin: true
    display:
      material: ENDER_PEARL
      amount: 4
      name: '&5&l4x Enderperlen'
  '9':
    chance: 40
    limit: -1
    displayIsWin: true
    display:
      material: ENDER_PEARL
      amount: 8
      name: '&5&l8x Enderperlen'
  '10':
    chance: 30
    limit: -1
    displayIsWin: true
    display:
      material: ENDER_PEARL
      amount: 16
      name: '&5&l16x Enderperlen'
  '11':
    chance: 45
    limit: -1
    displayIsWin: true
    display:
      material: EXPERIENCE_BOTTLE
      amount: 8
      name: '&a&l8x EP-Flaschen'
  '12':
    chance: 40
    limit: -1
    displayIsWin: true
    display:
      material: EXPERIENCE_BOTTLE
      amount: 16
      name: '&a&l16x EP-Flaschen'
  '13':
    chance: 30
    limit: -1
    displayIsWin: true
    display:
      material: EXPERIENCE_BOTTLE
      amount: 32
      name: '&a&l32x EP-Flaschen'
  '14':
    chance: 38
    limit: -1
    displayIsWin: true
    display:
      material: EMERALD_BLOCK
      amount: 1
      name: '&a&l1x Smaragdblock'
  '15':
    chance: 28
    limit: -1
    displayIsWin: true
    display:
      material: EMERALD_BLOCK
      amount: 2
      name: '&a&l2x Smaragdblöcke'
  '16':
    chance: 18
    limit: -1
    displayIsWin: true
    display:
      material: EMERALD_BLOCK
      amount: 3
      name: '&a&l3x Smaragdblöcke'
  '17':
    chance: 40
    limit: -1
    displayIsWin: false
    display:
      material: GOLD_NUGGET
      amount: 5
    cmd:
      cmds:
      - eco give %player% 500
      displayname: '&6&l500$ Geld'
  '18':
    chance: 35
    limit: -1
    displayIsWin: false
    display:
      material: GOLD_NUGGET
      amount: 7
    cmd:
      cmds:
      - eco give %player% 750
      displayname: '&6&l750$ Geld'
  '19':
    chance: 30
    limit: -1
    displayIsWin: false
    display:
      material: GOLD_INGOT
      amount: 1
    cmd:
      cmds:
      - eco give %player% 1000
      displayname: '&6&l1.000$ Geld'
  '20':
    chance: 25
    limit: -1
    displayIsWin: false
    display:
      material: GOLD_INGOT
      amount: 2
    cmd:
      cmds:
      - eco give %player% 1500
      displayname: '&6&l1.500$ Geld'
  '21':
    chance: 20
    limit: -1
    displayIsWin: false
    display:
      material: GOLD_INGOT
      amount: 3
    cmd:
      cmds:
      - eco give %player% 2000
      displayname: '&6&l2.000$ Geld'
  '22':
    chance: 35
    limit: -1
    displayIsWin: false
    display:
      material: AMETHYST_SHARD
      amount: 3
    cmd:
      cmds:
      - crystals add %player% 15
      displayname: '&d&l15 Kristalle'
  '23':
    chance: 30
    limit: -1
    displayIsWin: false
    display:
      material: AMETHYST_SHARD
      amount: 5
    cmd:
      cmds:
      - crystals add %player% 25
      displayname: '&d&l25 Kristalle'
  '24':
    chance: 25
    limit: -1
    displayIsWin: false
    display:
      material: AMETHYST_SHARD
      amount: 7
    cmd:
      cmds:
      - crystals add %player% 35
      displayname: '&d&l35 Kristalle'
  '25':
    chance: 20
    limit: -1
    displayIsWin: false
    display:
      material: AMETHYST_SHARD
      amount: 10
    cmd:
      cmds:
      - crystals add %player% 50
      displayname: '&d&l50 Kristalle'
  '26':
    chance: 25
    limit: -1
    displayIsWin: true
    display:
      material: DIAMOND_SWORD
      amount: 1
      name: '&b&lDiamant Schwert'
      enchantments:
        DAMAGE_ALL: 3
  '27':
    chance: 20
    limit: -1
    displayIsWin: true
    display:
      material: DIAMOND_PICKAXE
      amount: 1
      name: '&b&lDiamant Spitzhacke'
      enchantments:
        DIG_SPEED: 3
        DURABILITY: 2
  '28':
    chance: 20
    limit: -1
    displayIsWin: true
    display:
      material: DIAMOND_AXE
      amount: 1
      name: '&b&lDiamant Axt'
      enchantments:
        DIG_SPEED: 3
        DURABILITY: 2
  '29':
    chance: 18
    limit: -1
    displayIsWin: true
    display:
      material: DIAMOND_CHESTPLATE
      amount: 1
      name: '&b&lDiamant Brustpanzer'
      enchantments:
        PROTECTION_ENVIRONMENTAL: 2
  '30':
    chance: 18
    limit: -1
    displayIsWin: true
    display:
      material: DIAMOND_LEGGINGS
      amount: 1
      name: '&b&lDiamant Hose'
      enchantments:
        PROTECTION_ENVIRONMENTAL: 2
  '31':
    chance: 15
    limit: -1
    displayIsWin: true
    display:
      material: DIAMOND_CHESTPLATE
      amount: 1
      name: '&b&lGuter Diamant Brustpanzer'
      enchantments:
        PROTECTION_ENVIRONMENTAL: 3
        DURABILITY: 2
  '32':
    chance: 12
    limit: -1
    displayIsWin: true
    display:
      material: ELYTRA
      amount: 1
      name: '&5&lElytren'
  '33':
    chance: 8
    limit: 100
    displayIsWin: true
    display:
      material: ELYTRA
      amount: 1
      name: '&5&lElytren mit Haltbarkeit'
      lore:
      - '&c&lGlobal Limit: 100x'
      enchantments:
        DURABILITY: 3
  '34':
    chance: 3
    limit: 25
    displayIsWin: false
    display:
      material: ENDER_CHEST
      amount: 1
    cmd:
      cmds:
      - case add silver %player% 1
      displayname: '&7&l1x Silber Kiste'
      lore:
      - '&7Upgrade!'
      - '&6&lJACKPOT!'
      - '&c&lGlobal Limit: 25x'

```

{% endcode %}

***

## maingui.yml

Konfiguration des Hauptmenüs.

### Struktur

```yaml
# ##// Plugin Coded by Dyroxplays. \##

gui:
  name: '&eCaseOpening'
  length: 3
placeholder:
  enable: true
  BLACK_STAINED_GLASS_PANE: 0-26
caseshop:
  name: '&5Case Shop'
  lore:
  - '&7Kaufe Cases'
  - '&7Du hast &e%crystals% &7Crystals'
  slot: 22
  material: NETHER_STAR

```

***

## previewgui.yml

Konfiguration der Vorschau-GUI.

### Struktur

```yaml
# ##// Plugin Coded by Dyroxplays. \##

gui:
  name: '&6Mögliche Gewinne'
  length: 6
placeholder:
  enable: true
  BLACK_STAINED_GLASS_PANE: 45-53
itemlimitlore:
- '&a'
- '&c&l§nStückzahl Begrenzt'
- '&aAktuell sind noch &e%limit% &aStück verfügbar!'
- '&b'
items:
  prevPage:
    material: PLAYER_HEAD
    skullowner: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjdhYWNhZDE5M2UyMjI2OTcxZWQ5NTMwMmRiYTQzMzQzOGJlNDY0NGZiYWI1ZWJmODE4MDU0MDYxNjY3ZmJlMiJ9fX0=
    name: '&7«'
    slot: 52
  nextPage:
    material: PLAYER_HEAD
    skullowner: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTliZjMyOTJlMTI2YTEwNWI1NGViYTcxM2FhMWIxNTJkNTQxYTFkODkzODgyOWM1NjM2NGQxNzhlZDIyYmYifX19
    name: '&7»'
    slot: 53
  backtomain:
    material: BARRIER
    name: '&cZum Hauptmenü'
    slot: 45

```

***

## items.yml

Wiederverwendbare Item-Templates.

### Struktur

```yaml
# ##// Plugin Coded by Dyroxplays. \##

mobilecaseoopening:
  name: '&6Mobiles CaseOpening'
  lore:
  - '&7Platziere diesen Block und spiele CaseOpening von überall'
  - '&4&lAchtung: &7Beim Abbauen wird der Block komplett zerstört'
  material: CHEST
  holo: '&6Mobiles CaseOpening'
caseopening:
  speedindicator:
    material: PLAYER_HEAD
    skullowner: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTliZjMyOTJlMTI2YTEwNWI1NGViYTcxM2FhMWIxNTJkNTQxYTFkODkzODgyOWM1NjM2NGQxNzhlZDIyYmYifX19
    name: '&7Speedmultiplikator: x%speed%'
    slot: 8
  placeholder:
    enable: true
    GRAY_STAINED_GLASS_PANE: 0-3,5-8,18-26
  winindicator:
    material: HOPPER
    name: '&eGewinn:'
    slot: 4

```

***

## caseshop.yml

Konfiguration des Kristall-Shops.

### Struktur

```yaml
# ##// Plugin Coded by Dyroxplays. \##

confirmgui: '&6CaseShop &7> Sicher?'
gui:
  name: '&6CaseShop'
  lenght: 5
maingui:
  name: '&5Case Shop'
  lore:
  - '&7Kaufe Cases'
  - '&7Du hast &e%crystals% &7Crystals'
  slot: 22
  material: NETHER_STAR
backitem:
  name: '&cZurück'
  slot: 36
  material: NETHER_STAR
items:
  '1':
    material: CHEST
    name: '&7&lStarter Kiste'
    amount: 1
    lore:
    - '&7Für Einsteiger'
    - '&7'
    - '&ePreis: &6100 Kristalle'
    - '&d&lKauf mit Kristallen'
    price: 100
    crystals: true
    cmds:
    - case add starter %player% 1
  '2':
    material: CHEST
    name: '&6&lBronze Kiste'
    amount: 1
    lore:
    - '&7Solide Belohnungen'
    - '&7'
    - '&ePreis: &6200 Kristalle'
    - '&d&lKauf mit Kristallen'
    price: 200
    crystals: true
    cmds:
    - case add bronze %player% 1
  '3':
    material: ENDER_CHEST
    name: '&7&lSilber Kiste'
    amount: 1
    lore:
    - '&7Hochwertige Belohnungen'
    - '&7'
    - '&ePreis: &6500 Kristalle'
    - '&d&lKauf mit Kristallen'
    price: 500
    crystals: true
    cmds:
    - case add silver %player% 1
  '5':
    material: CHEST
    name: '&6&lGold Kiste'
    amount: 1
    lore:
    - '&7Premium-Belohnungen'
    - '&7'
    - '&ePreis: &61.500 Kristalle'
    - '&d&lKauf mit Kristallen'
    price: 1500
    crystals: true
    cmds:
    - case add gold %player% 1
  '6':
    material: ENDER_CHEST
    name: '&b&lDiamond Kiste'
    amount: 1
    lore:
    - '&7Legendäre Belohnungen'
    - '&7'
    - '&ePreis: &64.000 Kristalle'
    - '&d&lKauf mit Kristallen'
    price: 4000
    crystals: true
    cmds:
    - case add diamond %player% 1
  '7':
    material: ENDER_CHEST
    name: '&a&lSmaragd Kiste'
    amount: 1
    lore:
    - '&a&lEXKLUSIV FÜR VIPs!'
    - '&7Die besten Belohnungen'
    - '&7'
    - '&ePreis: &610.000 Kristalle'
    - '&d&lKauf mit Kristallen'
    - '&c&lPermission erforderlich!'
    price: 10000
    crystals: true
    cmds:
    - case add emerald %player% 1
  '19':
    material: BARREL
    name: '&7&lStarter Kiste'
    amount: 1
    lore:
    - '&7Für Einsteiger'
    - '&7'
    - '&ePreis: &6250$'
    - '&6&lKauf mit Geld'
    price: 250
    crystals: false
    cmds:
    - case add starter %player% 1
  '20':
    material: BARREL
    name: '&6&lBronze Kiste'
    amount: 1
    lore:
    - '&7Solide Belohnungen'
    - '&7'
    - '&ePreis: &6500$'
    - '&6&lKauf mit Geld'
    price: 500
    crystals: false
    cmds:
    - case add bronze %player% 1
  '21':
    material: BARREL
    name: '&7&lSilber Kiste'
    amount: 1
    lore:
    - '&7Hochwertige Belohnungen'
    - '&7'
    - '&ePreis: &61.500$'
    - '&6&lKauf mit Geld'
    price: 1500
    crystals: false
    cmds:
    - case add silver %player% 1
  '23':
    material: BARREL
    name: '&6&lGold Kiste'
    amount: 1
    lore:
    - '&7Premium-Belohnungen'
    - '&7'
    - '&ePreis: &64.000$'
    - '&6&lKauf mit Geld'
    price: 4000
    crystals: false
    cmds:
    - case add gold %player% 1
  '24':
    material: BARREL
    name: '&b&lDiamond Kiste'
    amount: 1
    lore:
    - '&7Legendäre Belohnungen'
    - '&7'
    - '&ePreis: &610.000$'
    - '&6&lKauf mit Geld'
    price: 10000
    crystals: false
    cmds:
    - case add diamond %player% 1
  '25':
    material: BARREL
    name: '&a&lSmaragd Kiste'
    amount: 1
    lore:
    - '&a&lEXKLUSIV FÜR VIPs!'
    - '&7Die besten Belohnungen'
    - '&7'
    - '&ePreis: &625.000$'
    - '&6&lKauf mit Geld'
    - '&c&lPermission erforderlich!'
    price: 25000
    crystals: false
    cmds:
    - case add emerald %player% 1

```

***

* `caseopening_cases` - Case-Bestände
* `caseopening_crystals` - Kristall-Bestände

***

{% hint style="info" %}
Tipps & Best Practices

* Backup: Erstelle vor größeren Änderungen ein Backup der Config-Dateien
* Reload: Nutze `/case reload` nach Änderungen in YML-Dateien
* Validierung: YAML ist leerzeichen-sensitiv - nutze einen YAML-Validator
* Chancen: Teste Gewinnchancen mit `/caseitem getitem` und echten Öffnungen
* Farbcodes: Nutze [Hex-Farben](https://www.color-hex.com/) für moderne Designs (1.16+)
* Items: Verwende items.yml für Items, die an mehreren Stellen genutzt werden
  {% endhint %}

***

## Häufige Konfigurationsfehler

<details>

<summary>Falsch: Leerzeichen in Case-Namen</summary>

```yaml
starter case:  # FEHLER
```

Richtig:

```yaml
starter_case:
```

</details>

<details>

<summary>Falsch: Ungültige Einrückung</summary>

```yaml
item:
material: DIAMOND  # FEHLER - fehlende Einrückung
```

Richtig:

```yaml
item:
  material: DIAMOND
```

</details>


# Commands

{% content-ref url="/pages/a3b2c1896eac6c54984a8ad063fcc1d06f18247d" %}
[registercaseblock](/caseopening/commands/registercaseblock)
{% endcontent-ref %}

{% content-ref url="/pages/d7a88c7585dc3d27821805ee7dc0b4d30ebfc27c" %}
[case](/caseopening/commands/case)
{% endcontent-ref %}

{% content-ref url="/pages/ad3a3b1279ff16def3e45b879e2e854ca6aa5ab7" %}
[caseitem](/caseopening/commands/caseitem)
{% endcontent-ref %}

{% content-ref url="/pages/3a1e17ec37a66e26f8c3ad09316ff89cad5c6df7" %}
[createcmditem](/caseopening/commands/createcmditem)
{% endcontent-ref %}

{% content-ref url="/pages/b83e98a3b3bfc22dc3bf4c9d2ab57f8720e88d66" %}
[crystals](/caseopening/commands/crystals)
{% endcontent-ref %}

{% content-ref url="/pages/2d89a4623b9d4fb20340dc7be09ad31757937dff" %}
[givemobilecaseopening](/caseopening/commands/givemobilecaseopening)
{% endcontent-ref %}


# registercaseblock

Befehle zum Einrichten des Case-Opening-Systems.

***

## `/registercaseblock`

Aktiviert den Registrierungs-Modus für Case-Blöcke.

**Permission:** `caseopening.registercaseblock`

### Verwendung:

{% stepper %}
{% step %}

### Befehl ausführen

```bash
/registercaseblock
```

{% endstep %}

{% step %}

### Block anklicken

* Linksklick auf einen beliebigen Block
  {% endstep %}

{% step %}

### Fertig!

* Der Block ist jetzt eine Case-Opening-Station
* Spieler können darauf klicken um das Case-GUI zu öffnen
  {% endstep %}
  {% endstepper %}

### Abbrechen:

* **Rechtsklick** (ohne Block) bricht den Modus ab

### Beispiel:

```bash
# 1. Befehl ausführen
/registercaseblock

# 2. Klicke auf einen Ender Chest Block
# 3. Wähle "Starter Case" aus dem GUI
# ✓ Ender Chest ist jetzt eine Starter-Case-Station
```

***

## `/unregistercaseblock`

Aktiviert den Entfernungs-Modus für registrierte Case-Blöcke.

**Permission:** `caseopening.unregistercaseblock`

### Verwendung:

{% stepper %}
{% step %}

### Befehl ausführen

```bash
/unregistercaseblock
```

{% endstep %}

{% step %}

### Registrierten Block anklicken

* Linksklick auf einen Case-Block
  {% endstep %}

{% step %}

### Fertig!

* Der Block ist nicht mehr registriert
* Normale Block-Funktion wiederhergestellt
  {% endstep %}
  {% endstepper %}

### Abbrechen:

* **Rechtsklick** (ohne Block) bricht den Modus ab

***

## Tipps für Case-Blöcke

### Empfohlene Block-Typen:

✅ Gut geeignet:

* `ENDER_CHEST` - Sieht nach Schatztruhe aus
* `CHEST` - Klassisch
* `BARREL` - Modern
* `BEACON` - Auffällig für wichtige Cases
* `ENCHANTING_TABLE` - Magisch
* `GLOWSTONE` - Leuchtend

❌ Nicht empfohlen:

* Blöcke die Spieler oft platzieren (COBBLESTONE, DIRT)
* Blöcke mit eigener Funktion (CRAFTING\_TABLE, FURNACE)
* Transparente Blöcke (GLASS)

***

## Fehlerbehebung

<details>

<summary>Block funktioniert nicht</summary>

**Prüfe:**

1. ✅ Block korrekt registriert? Prüfe `locs.yml`
2. ✅ Case existiert noch? `/case info`
3. ✅ Region erlaubt Interaktion?
4. ✅ Kein anderes Plugin blockiert den Rechtsklick?

</details>

<details>

<summary>Block nach Restart verschwunden</summary>

**Ursache:** Block wurde zerstört oder World neu generiert.

**Lösung:**

```bash
/unregistercaseblock
→ Klicke auf den alten/neuen Block

/registercaseblock
→ Registriere neu
```

Oder manuell in `locs.yml` bearbeiten.

</details>

<details>

<summary>Koordinaten herausfinden</summary>

**Ingame:**

```bash
# Aktiviere Debug-Screen
F3 (Java) oder Einstellungen (Bedrock)

# Oder nutze Command
/minecraft:tp ~ ~ ~ 
```

Zeigt deine aktuellen Koordinaten.

</details>

***

## Best Practices

* 💡 Zentral platzieren: Case-Blöcke am Spawn für maximale Sichtbarkeit
* 💡 Dekoration: Umgib Case-Blöcke mit passender Deko (Partikel-Plugins, Rüstungsständer)
* 💡 Kennzeichnung: Nutze Schilder oder Holograms zur Beschriftung
* 💡 Schutz: Schütze Case-Bereiche mit WorldGuard/PlotSquared
* 💡 Backup: Notiere Koordinaten oder exportiere `locs.yml` für Backups
* 💡 Testing: Teste mit verschiedenen Permissions ob alle Spieler Zugriff haben


# case

Der Hauptbefehl für die Verwaltung von Cases.

## Übersicht aller Befehle

```
/case create <Name> <Slot> <DisplayName...>
/case delete <Name>
/case edit <Name> <Option> <Wert...>
/case add <Name> <Spieler|*|**> <Anzahl>
/case remove <Name> <Spieler|*|**> <Anzahl>
/case take <Name> <Spieler|*|**> <Anzahl>
/case set <Name> <Spieler|*|**> <Anzahl>
/case info <Spieler>
/case reload
```

***

## /case create \<DisplayName...>

Erstellt ein neues Case.

Parameter:

* `Name` - Eindeutiger interner Name des Cases (alphanumerisch, keine Leerzeichen)
* `Slot` - Slot-Position im Main-GUI (0-53)
* `DisplayName` - Anzeigename des Cases (Leerzeichen erlaubt, Farbcodes erlaubt)

Permission: `caseopening.case.create`

Beispiele:

```
/case create starter 10 §6Starter Case
/case create legendary 20 §c§lLegendary Case
/case create daily 13 §e§lDaily Case
```

***

## /case delete

Löscht ein existierendes Case (inkl. aller Items und Daten).

Parameter:

* `Name` - Name des zu löschenden Cases

Permission: `caseopening.case.delete`

Beispiel:

```
/case delete starter
```

⚠️ Warnung: Dieser Vorgang kann nicht rückgängig gemacht werden!

***

## /case edit\<Wert...>

Bearbeitet die Eigenschaften eines Cases.

Permission: `caseopening.case.edit`

### Verfügbare Optionen

#### displayname \<DisplayName...>

Ändert den Anzeigenamen des Cases.

```bash
/case edit starter displayname §a§lNeuer Starter Case
```

***

#### amount

Setzt die Anzahl des Items im GUI.

```bash
/case edit starter amount 1
```

***

#### limit

Setzt die maximale Anzahl, die ein Spieler besitzen kann (-1 = unbegrenzt).

```bash
/case edit starter limit 100
/case edit daily limit -1
```

***

#### price

Setzt den Preis in Kristallen.

```bash
/case edit starter price 50
/case edit premium price 500
```

***

#### crystals \<true|false>

Lightning Round: Case wird beim Öffnen gekauft (true) oder bereits besessen (false).

```bash
/case edit starter crystals false
/case edit diamond crystals true
```

***

#### material \[Shortid]

Ändert das Item-Material des Cases.

```bash
/case edit starter material CHEST
/case edit legendary material ENDER_CHEST
/case edit starter material PLAYER_HEAD 12345
```

***

#### setItemOfHand

Setzt das Item in deiner Hand als Case-Item (inkl. NBT-Tags, Enchantments etc.).

```bash
/case edit starter setItemOfHand
```

Verwendung:

{% stepper %}
{% step %}

### Schritt 1

Halte das gewünschte Item in der Hand.
{% endstep %}

{% step %}

### Schritt 2

Führe den Befehl aus.
{% endstep %}

{% step %}

### Schritt 3

Das Item wird übernommen.
{% endstep %}
{% endstepper %}

***

#### addLore \<Lore...>

Fügt eine Lore-Zeile hinzu.

```bash
/case edit starter addLore §7Enthält grundlegende Items
/case edit starter addLore §r
/case edit starter addLore §eKosten: §650 Kristalle
```

Tipp: `§r` fügt eine Leerzeile ein.

***

#### removeLoreLine

Entfernt eine Lore-Zeile (Nummerierung beginnt bei 0).

```bash
/case edit starter removeLoreLine 2
```

Ohne Parameter zeigt es eine klickbare Liste aller Lore-Zeilen.

***

#### editLoreLine \<Lore...>

Bearbeitet eine bestehende Lore-Zeile.

```bash
/case edit starter editLoreLine 0 §7Neue Beschreibung
```

***

#### lightninground \<true|false>

Aktiviert/Deaktiviert Blitz-Effekt beim Öffnen des Cases.

```bash
/case edit starter lightninground true
/case edit starter lightninground false
```

***

#### enabled \<true|false>

Aktiviert/Deaktiviert das Case (deaktivierte Cases werden nicht im GUI angezeigt).

```bash
/case edit starter enabled true
/case edit event enabled false
```

***

#### permission \<None|Permission>

Setzt eine erforderliche Permission für das Case oder entfernt sie.

```bash
/case edit vipcase permission caseopening.case.vip
/case edit starter permission none
```

***

#### lootviewable \<true|false>

Erlaubt/Verbietet die Vorschau der Belohnungen.

```bash
/case edit starter lootviewable true
/case edit mystery lootviewable false
```

***

#### slot

Ändert den Slot des Cases im Main-GUI (0-53).

```bash
/case edit starter slot 10
/case edit legendary slot 16
```

***

## /case add \<Spieler|\*|\*\*>

Fügt einem oder mehreren Spielern Cases hinzu.

Parameter:

* `Name` - Case-Name
* `Spieler` - Spielername, `*` (alle online) oder `**` (alle in DB)
* `Anzahl` - Anzahl der Cases

Permission: `caseopening.case.add`

Beispiele:

```bash
/case add starter PlayerName 5
/case add legendary * 1          # Alle online Spieler
/case add epic ** 10             # Alle Spieler in DB
```

***

## /case remove \<Spieler|\*|\*\*>

Entfernt Cases von Spielern (nur wenn genug vorhanden).

Permission: `caseopening.case.remove`

Beispiel:

```bash
/case remove starter PlayerName 3
```

Hinweis: Wenn nicht genug Cases vorhanden sind, wird nichts entfernt.

***

## /case take \<Spieler|\*|\*\*>

Nimmt Cases von Spielern, auch wenn nicht genug vorhanden (kann negativ werden).

Permission: `caseopening.case.take`

Beispiel:

```bash
/case take starter PlayerName 100
```

Unterschied zu `remove`: Funktioniert auch wenn Spieler nicht genug Cases hat.

***

## /case set \<Spieler|\*|\*\*>

Setzt die Case-Anzahl eines Spielers auf einen exakten Wert.

Permission: `caseopening.case.set`

Beispiel:

```bash
/case set starter PlayerName 50
/case set legendary * 0           # Entfernt alle von online Spielern
```

***

## /case info

Zeigt alle Cases eines Spielers an.

Permission: `caseopening.case.info`

Beispiel:

```bash
/case info PlayerName
```

Ausgabe:

```
==========================
PlayerInfo: PlayerName
starter: 5
premium: 2
legendary: 0
==========================
```

***

## /case reload

Lädt alle Konfigurationsdateien neu.

Permission: `caseopening.case.reload`

Beispiel:

```bash
/case reload
```

Neu geladen werden:

* config.yml
* Alle Case-Dateien (caseItems/\*.yml)
* items.yml
* mainGUI.yml
* previewGUI.yml
* caseShop.yml

***

## Wildcards

* `*` = Alle **online** Spieler
* `**` = Alle Spieler in der **Datenbank** (online + offline)

Beispiele:

```bash
/case add starter * 5        # Nur online Spieler
/case set legendary ** 0     # Alle Spieler in DB
```

***

## Platzhalter

In Lore und Namen können folgende Platzhalter verwendet werden:

* `%amount%` - Anzahl der Cases, die der Spieler besitzt

Beispiel:

```bash
/case edit starter addLore §eDu hast §6%amount% §eCases
```

***

{% hint style="info" %}
Tipps

* Case-Namen: Verwende aussagekräftige Namen ohne Leerzeichen (z.B. `starter`, `legendary`, `daily_reward`)
* Testing: Nach dem Erstellen mit `/case add <case> <name> 1` testen
* Slot-Layout: Vermeide Überschneidungen mit GUI-Items (z.B. Kristall-Anzeige)
* Permissions: Setze Permissions für exklusive Cases (VIP, Premium etc.)
* Reload: Nach Änderungen an Case-Eigenschaften immer `/case reload` ausführen
  {% endhint %}


# caseitem

Verwaltet die Belohnungen (Items) in Cases.

## Übersicht aller Befehle

```
/caseitem create <CaseName> <Chance> <DisplayName...>
/caseitem edit <CaseName> <ItemID> <Option> <Wert...>
/caseitem getitem <CaseName> <ItemID>
/caseitem clone <FromCase> <ItemID> <ToCase>
/caseitem delete <CaseName> <ItemID>
```

***

## /caseitem create \<DisplayName...>

Erstellt ein neues Case-Item (Belohnung).

**Parameter:**

* `CaseName` - Name des Cases
* `Chance` - Gewinnchance in Prozent (z.B. 10.5 für 10,5%)
* `DisplayName` - Anzeigename des Items (mit Farbcodes)

**Permission:** `caseopening.caseitem.create`

**Beispiele:**

```bash
/caseitem create starter 85 §bDiamanten
/caseitem create starter 50 §6Goldbarren
/caseitem create legendary 5 §c§lEpisches Schwert
```

**Hinweis:** Das Item erhält automatisch die nächste verfügbare ID (1, 2, 3, ...).

***

## /caseitem edit\<Wert...>

Bearbeitet ein Case-Item.

**Permission:** `caseopening.caseitem.edit`

**Wichtig:** `<ItemID>` ist die **Zahl** des Items (1, 2, 3, ...), nicht ein Name!

### Verfügbare Optionen

#### chance

Ändert die Gewinnchance (in Prozent).

```bash
/caseitem edit starter 1 chance 10.5
/caseitem edit starter 2 chance 50
```

#### limit

Max. wie oft das Item gewonnen werden kann (-1 = unbegrenzt).

```bash
/caseitem edit starter 1 limit 5
/caseitem edit starter 2 limit -1
```

#### amount

Anzahl des Items (Stack-Size).

```bash
/caseitem edit starter 1 amount 5
/caseitem edit starter 2 amount 64
```

#### material

Ändert das Material des Items.

```bash
/caseitem edit starter 1 material DIAMOND
/caseitem edit starter 2 material NETHERITE_SWORD
```

#### setitemofhand

Setzt das Item in deiner Hand als Display-Item (nur Spieler).

```bash
/caseitem edit starter 1 setitemofhand
```

Verwendung:

1. Halte das gewünschte Item in der Hand
2. Führe den Befehl aus
3. Das Item (inkl. NBT, Enchantments) wird übernommen

#### addlore \<Lore...>

Fügt eine Lore-Zeile zum Item hinzu.

```bash
/caseitem edit starter 1 addLore §75x Diamanten
/caseitem edit starter 1 addLore §r
/caseitem edit starter 1 addLore §aSeltener Fund!
```

#### addcmd

Fügt einen Command hinzu, der beim Gewinnen ausgeführt wird.

```bash
/caseitem edit starter 1 addcmd give %player% diamond 5
/caseitem edit starter 1 addcmd eco give %player% 1000
/caseitem edit starter 1 addcmd lp user %player% parent add vip
/caseitem edit starter 1 addcmd tp %player% spawn
```

Platzhalter:

* `%player%` - Spielername

#### listcmd

Zeigt alle Commands des Items an (klickbar zum Bearbeiten/Löschen).

```bash
/caseitem edit starter 1 listcmd
```

#### removecmd confirm

Entfernt einen Command.

```bash
/caseitem edit starter 1 removecmd 0 confirm
```

#### editcmd

Bearbeitet einen bestehenden Command.

```bash
/caseitem edit starter 1 editcmd 0 give %player% emerald 10
```

#### firework \<true|false>

Aktiviert/Deaktiviert Feuerwerk beim Gewinnen.

```bash
/caseitem edit starter 1 firework true
/caseitem edit starter 2 firework false
```

#### broadcast

Setzt eine Broadcast-Nachricht für alle Spieler beim Gewinnen.

```bash
/caseitem edit starter 1 broadcast §6%player% §7hat §c§lDiamanten §7gewonnen!
/caseitem edit starter 1 broadcast none
```

Platzhalter:

* `%player%` - Spielername
* `%item%` - Item-Name

***

## /caseitem getitem

Gibt dir das Case-Item in die Hand (zum Testen).

**Permission:** `caseopening.caseitem.getitem`

**Beispiele:**

```bash
/caseitem getitem starter 1
/caseitem getitem legendary 5
```

Verwendung: Teste ob das Item korrekt konfiguriert ist, bevor Spieler es gewinnen können.

***

## /caseitem clone

Klont ein Case-Item in ein anderes Case.

**Permission:** `caseopening.caseitem.clone`

**Beispiele:**

```bash
/caseitem clone starter 1 premium
/caseitem clone legendary 5 epic
```

**Hinweis:** Das geklonte Item erhält automatisch eine neue ID im Ziel-Case.

***

## /caseitem delete confirm

Löscht ein Case-Item permanent.

**Permission:** `caseopening.caseitem.delete`

**Beispiel:**

```bash
/caseitem delete starter 1 confirm
```

⚠️ Warnung: Dieser Vorgang kann nicht rückgängig gemacht werden!

***

## Wichtige Hinweise

<details>

<summary>ItemID ist immer eine Zahl!</summary>

❌ Falsch:

```bash
/caseitem edit starter diamanten material DIAMOND
```

✅ Richtig:

```bash
/caseitem edit starter 1 material DIAMOND
```

Die ItemID ist die Nummer, die das Item beim Erstellen automatisch erhält (1, 2, 3, 4, ...).

</details>

<details>

<summary>Gewinnchancen</summary>

Das Plugin normalisiert automatisch alle Chancen:

Beispiel:

```
Item 1: 85%
Item 2: 70%
Item 3: 55%
```

Die Summe ist egal - nur das Verhältnis zählt!

Alternative Schreibweise (gleiche Verteilung):

```
Item 1: 17
Item 2: 14
Item 3: 11
```

</details>

<details>

<summary>Commands mit Platzhaltern</summary>

Verfügbare Platzhalter:

* `%player%` - Spielername
* `%uuid%` - Spieler-UUID

Beispiel-Commands:

```bash
# Geld geben
/caseitem edit starter 1 addcmd eco give %player% 1000

# Rang geben
/caseitem edit starter 1 addcmd lp user %player% parent add vip

# Teleportieren
/caseitem edit starter 1 addcmd tp %player% spawn

# Item geben
/caseitem edit starter 1 addcmd give %player% diamond 5

# Nachricht senden
/caseitem edit starter 1 addcmd tell %player% §aGlückwunsch!

# Cases geben
/caseitem edit starter 1 addcmd case add legendary %player% 1
```

</details>

***

## Workflow: Item erstellen

{% stepper %}
{% step %}

### Item erstellen

```bash
/caseitem create starter 50 §bDiamanten
```

{% endstep %}

{% step %}

### Material setzen

```bash
/caseitem edit starter 1 material DIAMOND
```

{% endstep %}

{% step %}

### Anzahl setzen

```bash
/caseitem edit starter 1 amount 5
```

{% endstep %}

{% step %}

### Lore hinzufügen

```bash
/caseitem edit starter 1 addLore §75x Diamanten
/caseitem edit starter 1 addLore §aSeltener Fund!
```

{% endstep %}

{% step %}

### Commands hinzufügen (optional)

```bash
/caseitem edit starter 1 addcmd eco give %player% 500
```

{% endstep %}

{% step %}

### Feuerwerk aktivieren (optional)

```bash
/caseitem edit starter 1 firework true
```

{% endstep %}

{% step %}

### Broadcast setzen (optional)

```bash
/caseitem edit starter 1 broadcast §6%player% §7hat §bDiamanten §7gewonnen!
```

{% endstep %}

{% step %}

### Testen

```bash
/caseitem getitem starter 1
```

{% endstep %}
{% endstepper %}

***

## Tipps

{% hint style="info" %}

* Nutze `/caseitem getitem` um Items vor dem Konfigurieren zu testen.
* Höhere Chancen = häufiger, niedrigere = seltener. Die Summe ist egal.
* Mehrere Commands nacheinander mit `addcmd` hinzufügen.
* Broadcast nur für sehr seltene/wichtige Items aktivieren (< 10%).
* Cloning spart Zeit wenn mehrere Cases ähnliche Items haben.
* `listcmd` zeigt alle Commands mit klickbaren Edit/Delete-Buttons (nur für Spieler).
  {% endhint %}


# createcmditem

Erstellt Items mit benutzerdefinierten Commands, die beim Rechtsklick ausgeführt werden.

**Permission:** `caseopening.createcmditem`

***

## Übersicht aller Sub-Befehle

```
/createcmditem addcmd <Command...>
/createcmditem listcmd
/createcmditem removecmd <Index> confirm
/createcmditem editcmd <Index> <Command...>
```

***

## /createcmditem addcmd \<Command...>

Fügt einen Command zum Item in deiner Hand hinzu.

{% stepper %}
{% step %}

### Schritte

1. Nimm ein Item in die Hand
2. Führe den Befehl aus
3. Der Command wird dem Item hinzugefügt
4. Bei Rechtsklick wird der Command ausgeführt
   {% endstep %}
   {% endstepper %}

Beispiele:

{% code title="Beispiele" %}

```bash
# Item geben
/createcmditem addcmd give %player% diamond 5

# Geld geben
/createcmditem addcmd eco give %player% 1000

# Rang geben
/createcmditem addcmd lp user %player% parent add vip

# Teleportieren
/createcmditem addcmd tp %player% spawn

# Case geben
/createcmditem addcmd case add legendary %player% 1

# Kristalle geben
/createcmditem addcmd add crystals %player% 500

# Nachricht senden
/createcmditem addcmd tell %player% §aGlückwunsch!

# Mehrere Commands (mehrere addcmd ausführen)
#createcmditem addcmd give %player% diamond 5
#createcmditem addcmd eco give %player% 1000
#createcmditem addcmd tell %player% §aBelohnung erhalten!
```

{% endcode %}

Platzhalter:

* `%player%` - Spielername der das Item nutzt

Hinweis: Du kannst mehrere Commands zu einem Item hinzufügen!

***

## /createcmditem listcmd

Zeigt alle Commands des Items in deiner Hand.

Verwendung:

{% code title="Verwendung" %}

```bash
# Item in Hand nehmen
/createcmditem listcmd
```

{% endcode %}

Ausgabe (für Spieler - klickbar):

```
--- Befehle für Item in Hand ---
[✎] [X] [0] give %player% diamond 5
[✎] [X] [1] eco give %player% 1000
[✎] [X] [2] tell %player% §aGlückwunsch!
```

Buttons:

* **\[✎]** = Bearbeiten (zeigt Suggest-Command)
* **\[X]** = Löschen (zeigt Bestätigung)

Ausgabe (für Console):

```
--- Befehle für Item in Hand ---
[0] give %player% diamond 5
[1] eco give %player% 1000
[2] tell %player% §aGlückwunsch!
```

***

## /createcmditem removecmd confirm

Entfernt einen Command vom Item.

{% stepper %}
{% step %}

### 1. Commands anzeigen

```bash
/createcmditem listcmd
```

{% endstep %}

{% step %}

### 2. Command entfernen

```bash
/createcmditem removecmd 0 confirm
```

{% endstep %}
{% endstepper %}

Beispiel:

{% code title="Beispiel" %}

```bash
# Zeige Commands
/createcmditem listcmd
# Ausgabe: [0] give %player% diamond 5
#          [1] eco give %player% 1000

# Entferne Command 0
/createcmditem removecmd 0 confirm

# Jetzt nur noch:
# [0] eco give %player% 1000  (Index verschoben!)
```

{% endcode %}

Hinweis: Nach dem Löschen verschieben sich die Indizes!

***

## /createcmditem editcmd \<Command...>

Bearbeitet einen bestehenden Command.

{% stepper %}
{% step %}

### 1. Aktuellen Command anzeigen

```bash
/createcmditem listcmd
```

{% endstep %}

{% step %}

### 2. Command ändern

```bash
/createcmditem editcmd 0 give %player% emerald 10
```

{% endstep %}
{% endstepper %}

Beispiel:

{% code title="Beispiel" %}

```bash
# Vorher:
/createcmditem listcmd
# [0] give %player% diamond 5

# Ändern:
/createcmditem editcmd 0 give %player% emerald 10

# Nachher:
/createcmditem listcmd
# [0] give %player% emerald 10
```

{% endcode %}

***

## Workflow: CMD-Item erstellen

### Schritt-für-Schritt Anleitung:

{% stepper %}
{% step %}

### 1. Item ins Inventory nehmen

Gib dir z.B. einen Diamanten:

```bash
/minecraft:give @s diamond 1
```

{% endstep %}

{% step %}

### 2. Commands hinzufügen

```bash
/createcmditem addcmd eco give %player% 1000
/createcmditem addcmd case add legendary %player% 1
/createcmditem addcmd crystals add %player% 500
/createcmditem addcmd tell %player% §a§lGlückwunsch! Du hast ein Reward-Item eingelöst!
```

{% endstep %}

{% step %}

### 3. Überprüfen

```bash
/createcmditem listcmd
```

{% endstep %}

{% step %}

### 4. Item umbenennen (optional)

Mit Amboss oder Command:

```bash
/minecraft:give @s diamond{display:{Name:'{"text":"§6§lReward Voucher","italic":false}'}} 1
```

{% endstep %}

{% step %}

### 5. Lore hinzufügen (optional)

```bash
/minecraft:give @s diamond{display:{Name:'{"text":"§6§lReward Voucher","italic":false}',Lore:['{"text":"§7Rechtsklick zum Einlösen","italic":false}','{"text":"§r"}','{"text":"§eBelohnungen:","italic":false}','{"text":"§7• 1000$","italic":false}','{"text":"§7• 1x Legendary Case","italic":false}','{"text":"§7• 500 Kristalle","italic":false}']}} 1
```

{% endstep %}

{% step %}

### 6. Verteilen

* Verkaufe im Shop
* Gib als Quest-Belohnung
* Nutze als Event-Reward
* Verkaufe gegen echtes Geld
  {% endstep %}
  {% endstepper %}

***

## Use Cases

### 💰 Shop-Voucher

Item: Goldbarren\
Commands:

```
Verwendung: Verkaufe für echtes Geld im Webshop
{% endcode %}

---

### 🎁 Event-Belohnung

Item: Nether Star  
Commands:
{% code %}
/createcmditem addcmd case add legendary %player% 3
/createcmditem addcmd crystals add %player% 1000
/createcmditem addcmd eco give %player% 10000
/createcmditem addcmd casebc §6%player% §7hat den §c§lEvent-Reward §7eingelöst!
```

***

### 🏆 Quest-Belohnung

Item: Diamant\
Commands:

```
Verwendung: Quest-Plugin gibt das Item als Reward
{% endcode %}

---

### 👑 Rang-Upgrade

Item: Beacon  
Commands:
{% code %}
/createcmditem addcmd lp user %player% parent add vip
/createcmditem addcmd casebc §d%player% §7ist jetzt §d§lVIP§7!
/createcmditem addcmd case add vipcase %player% 5
/createcmditem addcmd tell %player% §aWillkommen als VIP!
```

***

### 🎟️ Teleport-Ticket

Item: Paper\
Commands:

```
Verwendung: Einmal-Teleport zu speziellen Orten
{% endcode %}

---

### 🔑 Mystery-Box-Key

Item: Tripwire Hook  
Commands:
{% code %}
/createcmditem addcmd case add mystery %player% 1
/createcmditem addcmd tell %player% §eMystery Case erhalten!
```

***

## Tipps & Tricks

### 💡 Item-Design

Gutes Item:

* Eindeutiger Name (mit Farbcodes)
* Aussagekräftige Lore
* Passendes Material
* Optionale Enchantments (z.B. Glowing Effect)

Beispiel (Give-Command):

````
{% endcode %}

---

### 💡 Commands nacheinander

Commands werden in der Reihenfolge ausgeführt, wie sie hinzugefügt wurden!

Beispiel (wichtig für Logik):
```bash
# Zuerst prüfen ob genug Geld
# NICHT MÖGLICH mit createcmditem - nutze Plugins wie ConditionalCommands

# Aber Reihenfolge ist wichtig:
/createcmditem addcmd eco take %player% 1000    # Erst nehmen
/createcmditem addcmd case add starter %player% 1  # Dann geben
````


# crystals

Verwaltet die Kristall-Währung des Plugins.

**Aliase:** `/kristalle`, `/crystal`

## Übersicht aller Befehle

```
/crystals add <Spieler|*|**> <Anzahl>
/crystals remove <Spieler|*|**> <Anzahl>
/crystals take <Spieler|*|**> <Anzahl>
/crystals set <Spieler|*|**> <Anzahl>
/crystals info <Spieler>
```

***

## /crystals add \<Spieler|\*|\*\*>

Fügt einem oder mehreren Spielern Kristalle hinzu.

**Parameter:**

* `Spieler` - Spielername, `*` (alle online) oder `**` (alle in DB)
* `Anzahl` - Anzahl der Kristalle

**Permission:** `caseopening.crystals.add`

**Beispiele:**

```bash
/crystals add PlayerName 100
/crystals add * 50              # Alle online Spieler
/crystals add ** 25             # Alle Spieler in DB
```

**Verwendung:**

* Belohnungen für Events
* Vote-Rewards
* Daily-Rewards
* Quest-Belohnungen

***

## /crystals remove \<Spieler|\*|\*\*>

Entfernt Kristalle von Spielern (nur wenn genug vorhanden).

**Permission:** `caseopening.crystals.remove`

**Beispiele:**

```bash
/crystals remove PlayerName 50
/crystals remove * 10
```

**Hinweis:** Wenn nicht genug Kristalle vorhanden sind, wird nichts entfernt.

***

## /crystals take \<Spieler|\*|\*\*>

Nimmt Kristalle von Spielern (kann ins Negative gehen).

**Permission:** `caseopening.crystals.take`

**Beispiele:**

```bash
/crystals take PlayerName 1000
/crystals take ** 500
```

**Unterschied zu `remove`:**

* `remove` entfernt nur wenn genug vorhanden
* `take` zieht ab, auch wenn es negativ wird

***

## /crystals set \<Spieler|\*|\*\*>

Setzt Kristalle auf einen exakten Wert.

**Permission:** `caseopening.crystals.set`

**Beispiele:**

```bash
/crystals set PlayerName 500
/crystals set * 0               # Entfernt alle von online Spielern
/crystals set ** 1000           # Setzt alle auf 1000
```

**Verwendung:**

* Fixes bei negativen Werten
* Reset für Events
* Admin-Korrekturen

***

## /crystals info

Zeigt die Kristall-Anzahl eines Spielers.

**Permission:** `caseopening.crystals.info`

**Beispiel:**

```bash
/crystals info PlayerName
```

**Ausgabe:**

```
========================================
Kristall-Info für PlayerName
Crystals: 250
========================================
```

***

## Wildcards

* `*` = Alle **online** Spieler
* `**` = Alle Spieler in der **Datenbank** (online + offline)

**Beispiele:**

```bash
/crystals add * 100       # Nur online Spieler
/crystals set ** 0        # Alle Spieler in DB
```

***

## Startguthaben für neue Spieler

In [config.yml](file:///6293344/configuration.md#configyml):

```yaml
defaultcrystals: 100
```

Neue Spieler starten mit 100 Kristallen.

***

## Kristalle als Vote-Reward

**Mit AutomaticCraftVoteListener oder ähnlichen Plugins:**

```yaml
# In deren Config
rewards:
  - "crystals add %player% 10"
```

Oder als Server-Command im Vote-Plugin konfigurieren.

***

## Kristalle im Shop verkaufen

In [caseShop.yml](file:///6293344/configuration.md#caseshopyml):

```yaml
shop:
  items:
    small_pack:
      price: 100
      currency: MONEY
      reward:
        crystals: 50
```

Spieler können für $100 ingame Geld 50 Kristalle kaufen.

***

## Tipps

{% hint style="info" %}

* Negativ verhindern: Nutze `remove` statt `take` um negative Werte zu vermeiden
* Daily Rewards: Gib täglich automatisch Kristalle mit einem Scheduler-Plugin
* Events: Belohne Spieler mit Kristallen für Aktivitäten
* Shop: Verkaufe Kristalle gegen echtes Geld für P2W-Server
* Fixes: Nutze `/crystals set <spieler> 0` um negative Kristalle zu beheben
  {% endhint %}

***

## Häufige Probleme

<details>

<summary>Spieler hat negative Kristalle</summary>

**Ursache:** `/crystals take` wurde verwendet und der Spieler hatte nicht genug.

**Lösung:**

```bash
/crystals set PlayerName 0
```

</details>

<details>

<summary>Startguthaben funktioniert nicht</summary>

**Prüfe:**

defaultcrystals in config.yml gesetzt?Überprüfe, ob der Eintrag defaultcrystals korrekt in der Datei config.yml vorhanden ist.Plugin neu geladen?Führe /case reload oder einen Server- bzw. Plugin-Neustart durch, damit die Konfiguration neu eingelesen wird.Spieler wirklich neu?Stelle sicher, dass der betroffene Spieler tatsächlich erstmals auf dem Server war (erste Verbindung), sonst wird das Startguthaben nicht gesetzt.

</details>

<details>

<summary>Kristalle verschwinden</summary>

**Mögliche Ursachen:**

Flatfile: Keine Schreibrechte im Plugin-OrdnerPrüfe, ob der Server-Prozess Schreibrechte auf den Plugin-Ordner hat, falls Flatfile-Speicherung genutzt wird.MySQL: Verbindung unterbrochenBei MySQL: Prüfe die Datenbankverbindung und Logs auf Verbindungsabbrüche oder Fehler.Anderes Plugin greift in die Daten einEin anderes Plugin könnte Einträge ändern oder überschreiben. Prüfe installierte Plugins und deren Konfiguration.

**Lösung:** Prüfe Server-Logs und nutze MySQL für größere Server.

</details>


# givemobilecaseopening

Nützliche Hilfsbefehle für das Plugin.

***

## /givemobilecaseopening

Gibt dir ein mobiles Case-Opening-Item.

**Permission:** `caseopening.givemobilecaseopening`

### Verwendung:

```bash
/givemobilecaseopening
```

**Item-Eigenschaften:**

* Material: `NETHER_STAR` (konfigurierbar in `items.yml`)
* Rechtsklick öffnet das Main-GUI
* Funktioniert überall (keine Case-Blöcke nötig)

### Use Cases:

* Verkaufe als Shop-Item
* Gib als Quest-Belohnung
* Verteile an VIPs
* Nutze für Mobile-Events

### Item konfigurieren:

In [items.yml](file:///6293344/configuration.md#itemsyml):

```yaml
mobilecaseoopening:
  material: NETHER_STAR
  amount: 1
  displayname: "§6§lMobiles Case Opening"
  lore:
    - "§7Rechtsklick um das"
    - "§7Case-Menü zu öffnen"
```

***

## /casebc \<Nachricht...>

Sendet eine Broadcast-Nachricht an alle Spieler.

**Permission:** `caseopening.casebc`

### Verwendung:

```bash
/casebc §6Neues Update verfügbar!
/casebc §c§lWICHTIG: §7Server Restart in 5 Minuten!
```

**Unterstützt:**

* Standard Color Codes (`§a`, `§c`, `§6`, etc.)
* Hex-Farben (1.16+): `#FF5733Hallo`
* Formatierungen (`§l`, `§n`, `§o`, etc.)

### Beispiele:

```bash
# Einfache Nachricht
/casebc §aHallo Welt!

# Mit Hex-Farben (1.16+)
/casebc #FF5733Warnung: #00FF00Alles ok!

# Mehrere Formate
/casebc §6§l★ §eEvent startet! §6§l★
```

***

## /casemsg \<Nachricht...>

Sendet eine Nachricht an einen bestimmten Spieler.

**Permission:** `caseopening.casemsg`

### Verwendung:

```bash
/casemsg PlayerName §aWillkommen zurück!
/casemsg PlayerName §cDu hast ein Problem: ...
```

**Use Cases:**

* Private Admin-Nachrichten
* Support-Kommunikation
* Automatisierte Nachrichten

***

## /casegroupadd

Führt Case-Group-Befehle aus, wenn ein Spieler einer Gruppe beitritt.

**Permission:** `caseopening.casegroupadd`

**Hinweis:** Konfiguriert über `caseGroupRewards.yml`

### Konfiguration:

In `caseGroupRewards.yml`:

```yaml
groups:
  vip:
    commands:
      give:
        - "case add starter %player% 5"
        - "crystals add %player% 100"
        - "tell %player% §aWillkommen als VIP!"
      already-have:
        - "tell %player% §cDu bist bereits VIP!"
```

### Verwendung:

```bash
/casegroupadd PlayerName vip
```

**Was passiert:**

1. Prüft ob Spieler bereits in Gruppe ist
2. Führt `give` Commands aus wenn nicht
3. Führt `already-have` Commands aus wenn doch

***

## /casepermadd

Führt Case-Permission-Befehle aus, wenn ein Spieler eine Permission erhält.

**Permission:** `caseopening.casepermadd`

**Hinweis:** Konfiguriert über `casePermRewards.yml`

### Konfiguration:

In `casePermRewards.yml`:

```yaml
permissions:
  caseopening.reward.daily:
    commands:
      give:
        - "case add daily %player% 1"
        - "tell %player% §aDu hast deine tägliche Case erhalten!"
      already-have:
        - "tell %player% §cDu hast heute schon eine Case erhalten!"
```

### Verwendung:

```bash
/casepermadd PlayerName caseopening.reward.daily
```

***

## Tipps

{% hint style="info" %}

* Mobile Cases: Verkaufe im Shop für Geld oder gib als Belohnung
* CMD-Items: Perfekt für Custom-Rewards in Cases
* Broadcast: Nutze für wichtige Ankündigungen (Events, Updates)
* GroupAdd: Automatisiere Belohnungen mit LuckPerms-Integration
* PermAdd: Nutze für tägliche Belohnungen mit Permissions
  {% endhint %}

***

## Platzhalter

In Commands und Nachrichten:

* `%player%` - Spielername
* `%uuid%` - Spieler-UUID

***

## Beispiel-Workflows

### Tägliche Belohnung mit Permission

{% stepper %}
{% step %}

### Permission erstellen

```bash
# In LuckPerms
/lp group default permission set caseopening.daily.receive true
```

{% endstep %}

{% step %}

### Reward konfigurieren

In `casePermRewards.yml`:

```yaml
permissions:
  caseopening.daily.claimed:
    commands:
      give:
        - "case add daily %player% 1"
      already-have:
        - "tell %player% §cHeute schon erhalten!"
```

{% endstep %}

{% step %}

### Automatisieren

Mit einem Scheduler-Plugin (z.B. DeluxeCommands):

```yaml
# Jeden Tag um 00:00
schedule:
  daily:
    cron: "0 0 * * *"
    commands:
      - "lp user * permission unset caseopening.daily.claimed"
```

{% endstep %}

{% step %}

### Spieler holt Belohnung

```bash
/casepermadd %player% caseopening.daily.claimed
```

{% endstep %}
{% endstepper %}

***

### VIP-Welcome-Package

{% stepper %}
{% step %}

### Konfiguration

In `caseGroupRewards.yml`:

```yaml
groups:
  vip:
    commands:
      give:
        - "case add starter %player% 10"
        - "case add premium %player% 3"
        - "crystals add %player% 500"
        - "eco give %player% 5000"
        - "casebc §d%player% §7ist jetzt §d§lVIP§7!"
```

{% endstep %}

{% step %}

### Wenn Spieler VIP wird

```bash
/casegroupadd PlayerName vip
```

{% endstep %}
{% endstepper %}


# Permissions

Eine vollständige Übersicht aller Permissions des CaseOpening-Plugins.

## Wildcard-Permissions

### `caseopening.*`

**Beschreibung:** Gewährt alle Permissions des Plugins\
**Empfohlen für:** Server-Administratoren\
**Beinhaltet:** Alle unten aufgeführten Permissions

### `caseopening.admin`

**Beschreibung:** Gewährt alle administrativen Permissions\
**Empfohlen für:** Administratoren und Moderatoren\
**Beinhaltet:**

* Alle Case-Verwaltungs-Permissions
* Alle CaseItem-Verwaltungs-Permissions
* Alle Kristall-Verwaltungs-Permissions
* Setup-Befehle
* Utility-Befehle

***

## Case-Verwaltung

### Case-Erstellung & Bearbeitung

#### `caseopening.case.create`

**Beschreibung:** Erlaubt das Erstellen neuer Cases\
**Befehl:** `/case create <Name> <Slot> <DisplayName...>`\
**Standard:** OP

#### `caseopening.case.delete`

**Beschreibung:** Erlaubt das Löschen von Cases\
**Befehl:** `/case delete <Name>`\
**Standard:** OP

#### `caseopening.case.edit`

**Beschreibung:** Erlaubt das Bearbeiten von Case-Eigenschaften\
**Befehl:** `/case edit <Name> <Option> <Wert...>`\
**Standard:** OP\
**Beinhaltet:** Alle Edit-Optionen (displayname, maxAmount, price, material, etc.)

***

### Case-Mengen-Verwaltung

#### `caseopening.case.add`

**Beschreibung:** Erlaubt das Hinzufügen von Cases zu Spielern\
**Befehl:** `/case add <Name> <Spieler|*|**> <Anzahl>`\
**Standard:** OP

#### `caseopening.case.remove`

**Beschreibung:** Erlaubt das Entfernen von Cases von Spielern\
**Befehl:** `/case remove <Name> <Spieler|*|**> <Anzahl>`\
**Standard:** OP\
**Hinweis:** Entfernt nur wenn genügend Cases vorhanden sind

#### `caseopening.case.take`

**Beschreibung:** Erlaubt das Wegnehmen von Cases (auch ins Negative)\
**Befehl:** `/case take <Name> <Spieler|*|**> <Anzahl>`\
**Standard:** OP\
**Hinweis:** Kann negative Werte erzeugen

#### `caseopening.case.set`

**Beschreibung:** Erlaubt das Setzen einer exakten Case-Anzahl\
**Befehl:** `/case set <Name> <Spieler|*|**> <Anzahl>`\
**Standard:** OP

***

### Case-Informationen & Verwaltung

#### `caseopening.case.info`

**Beschreibung:** Erlaubt das Abfragen von Case-Informationen\
**Befehl:** `/case info <Spieler>`\
**Standard:** OP

#### `caseopening.case.reload`

**Beschreibung:** Erlaubt das Neuladen der Konfiguration\
**Befehl:** `/case reload`\
**Standard:** OP

***

## Case-Item-Verwaltung

### Item-Erstellung & Bearbeitung

#### `caseopening.caseitem.create`

**Beschreibung:** Erlaubt das Erstellen von Case-Items (Belohnungen)\
**Befehl:** `/caseitem create <CaseName> <ItemID> <Chance> <DisplayName...>`\
**Standard:** OP

#### `caseopening.caseitem.edit`

**Beschreibung:** Erlaubt das Bearbeiten von Case-Items\
**Befehl:** `/caseitem edit <CaseName> <ItemID> <Option> <Wert...>`\
**Standard:** OP\
**Beinhaltet:** Alle Edit-Optionen (displayname, chance, amount, givecommands, etc.)

#### `caseopening.caseitem.delete`

**Beschreibung:** Erlaubt das Löschen von Case-Items\
**Befehl:** `/caseitem delete <CaseName> <ItemID>`\
**Standard:** OP

***

### Item-Verwaltung

#### `caseopening.caseitem.getitem`

**Beschreibung:** Erlaubt das Erhalten eines Case-Items zum Testen\
**Befehl:** `/caseitem getitem <CaseName> <ItemID>`\
**Standard:** OP

#### `caseopening.caseitem.clone`

**Beschreibung:** Erlaubt das Klonen von Case-Items\
**Befehl:** `/caseitem clone <CaseName> <ItemID> <NeueCaseName> <NeueItemID>`\
**Standard:** OP

***

## Kristall-System

### `caseopening.crystals`

**Beschreibung:** Basis-Permission für Kristall-Befehle\
**Standard:** OP\
**Hinweis:** Erforderlich für alle `/crystals` Befehle

#### `caseopening.crystals.add`

**Beschreibung:** Erlaubt das Hinzufügen von Kristallen\
**Befehl:** `/crystals add <Spieler|*|**> <Anzahl>`\
**Standard:** OP

#### `caseopening.crystals.remove`

**Beschreibung:** Erlaubt das Entfernen von Kristallen\
**Befehl:** `/crystals remove <Spieler|*|**> <Anzahl>`\
**Standard:** OP

#### `caseopening.crystals.take`

**Beschreibung:** Erlaubt das Wegnehmen von Kristallen (auch ins Negative)\
**Befehl:** `/crystals take <Spieler|*|**> <Anzahl>`\
**Standard:** OP

#### `caseopening.crystals.set`

**Beschreibung:** Erlaubt das Setzen einer exakten Kristall-Anzahl\
**Befehl:** `/crystals set <Spieler|*|**> <Anzahl>`\
**Standard:** OP

#### `caseopening.crystals.info`

**Beschreibung:** Erlaubt das Abfragen von Kristall-Informationen\
**Befehl:** `/crystals info <Spieler>`\
**Standard:** OP

***

## Setup & Registrierung

### `caseopening.registercaseblock`

**Beschreibung:** Erlaubt das Registrieren von Case-Blöcken\
**Befehl:** `/registercaseblock`\
**Standard:** OP\
**Verwendung:** Aktiviert den Registrierungs-Modus zum Klicken auf Blöcke

### `caseopening.unregistercaseblock`

**Beschreibung:** Erlaubt das Entfernen von Case-Blöcken\
**Befehl:** `/unregistercaseblock`\
**Standard:** OP\
**Verwendung:** Aktiviert den Entfernungs-Modus zum Klicken auf Blöcke

***

## Modul-Befehle

### `caseopening.casegroupadd`

**Beschreibung:** Erlaubt das Ausführen von Case-Group-Rewards\
**Befehl:** `/casegroupadd <Spieler> <GruppenName>`\
**Standard:** OP\
**Verwendung:** Vergibt konfigurierte Belohnungen wenn ein Spieler einer Gruppe beitritt

### `caseopening.casepermadd`

**Beschreibung:** Erlaubt das Ausführen von Case-Permission-Rewards\
**Befehl:** `/casepermadd <Spieler> <Permission>`\
**Standard:** OP\
**Verwendung:** Vergibt konfigurierte Belohnungen wenn ein Spieler eine Permission erhält

### `caseopening.givemobilecaseopening`

**Beschreibung:** Erlaubt das Erhalten des mobilen Case-Opening-Items\
**Befehl:** `/givemobilecaseopening`\
**Standard:** OP\
**Verwendung:** Gibt ein Item, mit dem man überall Cases öffnen kann

***

## Utility-Befehle

### `caseopening.createcmditem`

**Beschreibung:** Erlaubt das Erstellen von Items mit Commands\
**Befehl:** `/createcmditem <addcmd|listcmd|removecmd|editcmd> [...]`\
**Standard:** OP\
**Verwendung:** Erstellt Items, die beim Rechtsklick Commands ausführen

### `caseopening.casebc`

**Beschreibung:** Erlaubt das Senden von Broadcast-Nachrichten\
**Befehl:** `/casebc <Nachricht...>`\
**Standard:** OP\
**Hinweis:** Unterstützt Hex-Farben und Color Codes

### `caseopening.casemsg`

**Beschreibung:** Erlaubt das Senden von Nachrichten an Spieler\
**Befehl:** `/casemsg <Spieler> <Nachricht...>`\
**Standard:** OP

***

## Spieler-Permissions

### Case-Zugriff

#### `caseopening.case.<casename>`

**Beschreibung:** Erlaubt einem Spieler das Öffnen eines bestimmten Cases\
**Beispiel:** `caseopening.case.starter`, `caseopening.case.legendary`\
**Standard:** -\
**Hinweis:** Nur erforderlich wenn das Case mit einer Permission konfiguriert wurde

#### `caseopening.case.<casename>.bypass.maxamount`

**Beschreibung:** Umgeht das maximale Case-Limit für ein bestimmtes Case\
**Beispiel:** `caseopening.case.starter.bypass.maxamount`\
**Standard:** -

***

### GUI-Zugriff

#### `caseopening.gui.main`

**Beschreibung:** Erlaubt das Öffnen des Main-GUIs\
**Standard:** Alle Spieler (true)\
**Hinweis:** Wird automatisch beim Klicken auf Case-Blöcke benötigt

#### `caseopening.gui.preview`

**Beschreibung:** Erlaubt das Öffnen der Case-Vorschau\
**Standard:** Alle Spieler (true)\
**Hinweis:** Nur relevant wenn Preview für ein Case aktiviert ist

#### `caseopening.gui.crystals`

**Beschreibung:** Erlaubt das Öffnen des Kristall-GUIs\
**Standard:** Alle Spieler (true)

***

### Spezial-Permissions

#### `caseopening.mobile.use`

**Beschreibung:** Erlaubt die Nutzung des mobilen Case-Opening-Item\
**Standard:** -\
**Hinweis:** Spieler mit dieser Permission können das mobile Item verwenden

#### `caseopening.shop.use`

**Beschreibung:** Erlaubt den Zugriff auf den Case-Shop (falls aktiviert)\
**Standard:** Alle Spieler (true)

***

## Permission-Gruppen (Empfehlungen)

### Admin-Gruppe

```yaml
permissions:
  - caseopening.admin
  - caseopening.*
```

### Moderator-Gruppe

```yaml
permissions:
  - caseopening.case.info
  - caseopening.case.add
  - caseopening.crystals.add
  - caseopening.crystals.info
  - caseopening.casebc
```

### Spieler-Gruppe

```yaml
permissions:
  - caseopening.gui.main
  - caseopening.gui.preview
  - caseopening.gui.crystals
  - caseopening.shop.use
```

### VIP-Gruppe (Beispiel)

```yaml
permissions:
  - caseopening.case.vip
  - caseopening.case.vip.bypass.maxamount
  - caseopening.mobile.use
```

***

## Tipps & Best Practices

* 💡 Wildcard mit Vorsicht: Vergib `caseopening.*` nur an vertrauenswürdige Admins
* 💡 Case-Permissions: Nutze Case-Permissions für VIP/Donator-exklusive Cases
* 💡 Bypass-Permissions: Gib Bypass-Permissions für Premium-Spieler
* 💡 Modul-Befehle: Nutze `/casegroupadd` und `/casepermadd` in Skripten für automatische Belohnungen
* 💡 Testing: Gib dir temporär Admin-Permissions zum Testen der Case-Konfiguration
* 💡 Gruppe statt Einzeln: Nutze Permission-Management-Plugins wie LuckPerms für bessere Verwaltung

***

## Häufige Kombinationen

### Case-Manager (ohne volle Admin-Rechte)

```yaml
- caseopening.case.create
- caseopening.case.edit
- caseopening.case.delete
- caseopening.caseitem.create
- caseopening.caseitem.edit
- caseopening.caseitem.delete
- caseopening.case.reload
```

### Event-Manager

```yaml
- caseopening.case.add
- caseopening.crystals.add
- caseopening.casebc
- caseopening.case.info
- caseopening.crystals.info
```

### Support-Team

```yaml
- caseopening.case.info
- caseopening.crystals.info
- caseopening.caseitem.getitem
```

***


# Vorgefertigte Dateien

Hier findest du einige vorgefertige Dateien für das Plugin: Betterspawner

{% hint style="info" %}
Es wird empfohlen: Nutze die neuste Version, wenn diese auf deinem Server nicht geht, gehe immer Schritt für Schritt eins runter.
{% endhint %}

### Neuste Version

{% file src="/files/eOSnstm1f3VxanhCyy1L" %}

### 1.16.5

{% file src="/files/rsuJzhB9YWWKR1PZUhj4" %}

### Ältere Versionen

{% file src="/files/8WES9LGmP2YnEyY68I0Q" %}


# Beschreibung

Biete deinen Spielern tägliche Herausforderungen (Quests) per GUI-Menü, die sie durch das Sammeln und Abgeben von Items erfüllen können, um Belohnungen zu erhalten.

{% hint style="success" %}
🐎 **Halte deine Spieler durch abwechslungsreiche, tägliche Aufgaben langfristig aktiv!**
{% endhint %}

## Features

{% tabs %}
{% tab title="📋 Quest-System" %}

#### Aufgaben & Ablauf

* **Zufällige Tagesquests:** Das System wählt täglich neue, zufällige Aufgaben aus deinem Pool an konfigurierten Quests aus.
* **Quest-GUI:** Zeigt aktive Quests, deren Fortschritt und Belohnungen in einem anpassbaren Menü an.
* **Einfache Abgabe:** Spieler können geforderte Items einfach per **Mittelklick** im Inventar abgeben.
  {% endtab %}

{% tab title="⚙️ Cooldown & Belohnung" %}

#### Ablaufsteuerung

* **24-Stunden-Sperre:** Nach erfolgreichem Abschluss aller täglichen Quests startet ein 24-Stunden-Cooldown bis zu den nächsten Quests.
* **Admins-Bypass:** Admins können den Cooldown eines Spielers manuell vorzeitig per Befehl aufheben.
* **Vault-Belohnung:** Reibungslose Auszahlung der Geldprämien über die Server-Wirtschaft.
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch.
{% endstep %}

{% step %}

#### Abhängigkeiten prüfen

Stelle sicher, dass **Vault** und ein Economy-Plugin (z. B. EssentialsX) installiert und aktiv sind, um Quest-Belohnungen auszahlen zu können.
{% endstep %}

{% step %}

#### Quests konfigurieren

1. Starte den Server einmal, damit `/plugins/DailyQuests/` und die standardmäßige `config.yml` erstellt werden.
2. Definiere in der `config.yml` deine Quests (gefordertes Item-Material, Menge und Geld-Belohnung).
3. Starte den Server neu, um die Quests live zu schalten.
   {% endstep %}
   {% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/dailyquest</code></td><td>Öffnet das tägliche Quest-Menü. (Alias: <code>/dq</code>)</td><td><code>dailyquest.use</code></td></tr><tr><td><code>/fixdailyquest &#x3C;Spieler></code></td><td>Hebt den Quest-Cooldown eines Spielers vorzeitig auf.</td><td><code>dailyquest.fix</code></td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Passe deine Quests, die Geld-Belohnungen, das GUI-Design, den Quest-Cooldown und die MySQL-Anbindung flexibel in der `config.yml` an.

***

## Dateiübersicht

Das Plugin erstellt nach dem ersten Serverstart folgende Datei:

* **`plugins/DailyQuests/config.yml`**: Verwaltet alle Einstellungen, Nachrichten und Quest-Items.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Einstellungen" %}

#### Allgemeine Optionen

```yaml
# Der Präfix vor Systemmeldungen
prefix: '&7[&9DailyQuests&7]'

# Cooldown (in Minuten), bevor Spieler neue Quests annehmen können (1440 = 24 Stunden)
cooldownmin: 1440

# Bei 'true' wird die Interaktion mit dem Villager-NPC als Quest-Abgabe gewertet
interactwithvillagerisdeliver: true
```

{% endtab %}

{% tab title="🗄️ MySQL" %}

#### Datenbank-Optionen

```yaml
MySQL:
  enable: false
  host: localhost
  port: '3306'
  username: root
  database: db12
  password: password239239
```

* **`enable`**: Aktiviere MySQL, um Quest-Fortschritte und Cooldowns über mehrere Server hinweg abzugleichen.
  {% endtab %}

{% tab title="🪙 Währung" %}

#### Belohnungs-Befehle (Vault-Alternative)

```yaml
# Falls dein Economy-Plugin nur Ganzzahlen unterstützt
moneyCastToInt: false

# Befehle, die ausgeführt werden, um dem Spieler Geld zu geben/abzuziehen
AddMoneyCommand: eco give %player% %money%
RemoveMoneyCommand: eco take %player% %money%
```

{% endtab %}

{% tab title="🎨 GUI-Layout" %}

#### Menü-Design

```yaml
invname: '&9Quests'
invsize: 3 # Reihenanzahl (1-6)

# Hintergrund-Füllung
placeholder:
  material: STAINED_GLASS_PANE
  shortid: 7

# Slot-Belegung für die Quests (z. B. Slot 11)
questsslots:
- '11'
```

{% endtab %}
{% endtabs %}

***

## Menü-Gegenstände anpassen

Du kannst das Aussehen aller Menü-Gegenstände in der GUI anpassen:

```yaml
# Item, wenn die Quest erfolgreich beendet wurde
done:
  material: INK_SACK
  shortid: 10
  name: '&aAbgeschlossene Quests'
  lore:
  - '&7Diese Quests hast du bereits erfolgreich abgeschlossen'

# Item zum Abbrechen der Quest
cancel:
  name: '&cQuest abbrechen'
  lore:
  - '&cQuest abbrechen'
  slot: 15

# Item zum Anfordern einer neuen Quest
newquest:
  name: '&9Neue Quest anfordern'
  slot: 13
  lore:
  - '&7Nehme eine neue Quest an, um Belohungen zu erhalten'

# Item, wenn die Quest gesperrt ist (Cooldown aktiv)
waitquest:
  name: '&cDu musst dich noch gedulden!'
  slot: 13
  lore:
  - '&cDu kannst erst in %hour% Stunden %min% Minuten'
  - '&cund %sec% Sekunden wieder eine neue Quest annehmen'
```

***

## Quests erstellen (`quests`)

Unter dem Key `quests` definierst du deine Quests:

```yaml
quests:
  '1': # Quest ID
    material: LOG # Gefordertes Item-Material
    shortid: 0
    amount: 64 # Geforderte Item-Anzahl
    price: 100 # Geld-Belohnung (wird via AddMoneyCommand ausgezahlt)
    name: '&7Bringe 64 Eichenholz'
    lore:
    - '&aBringe mir 64 Eichenholz und erhalte 100$'
```

***

## Systemnachrichten

```yaml
messages:
  noperm: '&cDazu hast du keine Rechte.'
  fixdaily: '&a%player% hat nun eine neue Quest erhalten.'
  notonlne: '&cDer Spieler ist nicht online.'
  usage: '&cNutze: /fixdailyquest <Spieler>'
  success: '&aDu hast eine Quest erfolgreich abgeschlossen und hast %money% $ als Belohnung erhalten.'
  error: '&cDie Items sind nicht identisch.'
```


# Eigene Quests

In diesem Guide lernst du, wie du eigene tägliche Lieferquests für das **DailyQuests**-Plugin erstellst und anpasst.

***

## Grundlagen des Quest-Systems

Das Questsystem funktioniert auf Basis von **Abgabe-Quests** (Delivery Quests):

1. Das System wählt zufällig eine konfigurierte Quest aus und zeigt sie dem Spieler in der GUI an.
2. Der Spieler muss das geforderte Item sammeln (mit genau passendem Namen, Lore und Verzauberung).
3. Durch Anklicken der Quest im Menü (oder per Linksklick mit dem Item) gibt der Spieler die Quest ab und erhält die konfigurierte Belohnung (Geld/Tokens).

***

## Konfigurations-Struktur

Jede Quest wird in der `config.yml` unter dem Hauptschlüssel `quests` definiert. Die Quests werden fortlaufend nummeriert (z. B. `'1'`, `'2'`, `'3'`).

```yaml
quests:
  '1':
    material: 'MATERIALNAME'   # Minecraft-Material (z.B. DIAMOND, STONE)
    amount: 1                  # Anzahl der geforderten Gegenstände
    shortid: 0                 # Sub-ID (wichtig für ältere Versionen, z.B. Wolle-Farben)
    price: 150                 # Belohnung (Geld/Tokens) bei Abgabe
    name: 'Anzeigename'         # Custom Name des Items (optional)
    lore:                      # Custom Lore des Items (optional)
      - '&7Zeile 1'
    ench:                      # Custom Verzauberungen (optional)
      - 'ENCHANTMENT_NAME;STUFE' # Format: Name;Stufe (z.B. DURABILITY;3)
```

***

## Item-Vergleichsregeln beim Abgeben

Wenn ein Spieler ein Item abgibt, vergleicht das Plugin das Inventar-Item mit dem konfigurierten Quest-Item. Dabei gilt:

* ✅ **Material und Sub-ID (shortid)** müssen übereinstimmen.
* ✅ **Anzeigename (Display Name)** und **Lore (Beschreibung)** müssen exakt übereinstimmen (inklusive aller Farbcodes).
* ✅ **Verzauberungen** müssen exakt übereinstimmen.
* ❌ Die **Menge (Amount)** wird nicht auf exakte Übereinstimmung geprüft; der Spieler muss mindestens die geforderte Menge besitzen, überschüssige Items bleiben erhalten.

***

## Schritt-für-Schritt-Anleitung: Neue Quest hinzufügen

Hier siehst du, wie du beispielsweise eine Quest für das Abliefern von 5 verzauberten Diamantschwertern erstellst.

{% stepper %}
{% step %}

#### Quest-ID wählen

Finde die nächste freie Nummer unter `quests` (z. B. `'4'`).
{% endstep %}

{% step %}

#### Material & Belohnung konfigurieren

Als Material wählen wir `DIAMOND_SWORD`. Die Belohnung soll `1000` Coins betragen.
{% endstep %}

{% step %}

#### Verzauberungen & Namen bestimmen

Wir möchten, dass der Spieler ein Schwert mit Schärfe V (`DAMAGE_ALL;5`) und Haltbarkeit III (`DURABILITY;3`) abliefern muss. Der Name soll `&bKriegsklinge` lauten.
{% endstep %}

{% step %}

#### YAML in config.yml eintragen

Füge den Block zu deiner `config.yml` hinzu:

```yaml
quests:
  '4':
    material: DIAMOND_SWORD
    amount: 1
    shortid: 0
    price: 1000
    name: '&bKriegsklinge'
    lore:
      - '&7Eine geschmiedete Waffe'
      - '&7für die tägliche Quest.'
    ench:
      - 'DAMAGE_ALL;5'
      - 'DURABILITY;3'
```

{% endstep %}
{% endstepper %}


# Beschreibung

Motiviere deine Spieler zu täglicher Aktivität, indem du sie mit einem grafischen Belohnungsmenü (Daily Rewards) beschenkst – inklusive Premium-Belohnungen und NPC-Anbindung.

{% hint style="success" %}
💸 **Steigere deine täglichen Spielerzahlen durch attraktive Login-Belohnungen!**
{% endhint %}

## Features

{% tabs %}
{% tab title="🎁 Belohnungs-System" %}

#### Tägliche Geschenke

* **Umfangreiches GUI-Menü:** Ermöglicht bis zu 54 verschiedene Belohnungs-Items zur Auswahl.
* **Befehlsbasierte Rewards:** Führe beliebig viele Befehle zeitgleich aus (z. B. Geld vergeben, Items droppen, Ränge zuweisen).
* **Komplett anpassbar:** Items, Beschreibungen, Lore-Texte und Slot-Belegungen lassen sich vollständig konfigurieren.
  {% endtab %}

{% tab title="👑 Premium & Rechte" %}

#### Exklusive Geschenke

* **Ranks- & Perm-Check:** Belohnungen können an bestimmte Permissions gebunden werden, um VIPs oder Premium-Spielern bessere Geschenke zu bieten.
* **Daten-Speicherung:** Unterstützt Dateispeicherung oder MySQL-Anbindung (ideal für Netzwerke mit mehreren Servern).
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch.
{% endstep %}

{% step %}

#### Konfiguration anpassen

1. Starte den Server einmal, damit `/plugins/DailyRewards/` und die standardmäßige `config.yml` erstellt werden.
2. Definiere in der `config.yml` deine Belohnungen (Material, Name, Slot, Permission und die Befehle, die ausgeführt werden).
3. Setze `dailyrewardscmd` auf `true`, falls Spieler das Menü direkt per Befehl öffnen dürfen.
   {% endstep %}

{% step %}

#### Belohnungs-NPC platzieren

1. Gehe im Spiel an die Stelle, an der der Belohnungs-NPC stehen soll.
2. Führe `/setdailyrewards` aus (erfordert `dailyrewards.admin`).
3. Ein Librarian-Villager ohne AI und unverwundbar wird gespawnt.
   {% endstep %}
   {% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/dailyrewards</code></td><td>Öffnet das Belohnungsmenü (nur wenn <code>dailyrewardscmd: true</code> in der Config).</td><td>-</td></tr><tr><td><code>/setdailyrewards</code></td><td>Spawnt den Belohnungs-NPC an deiner aktuellen Position.</td><td><code>dailyrewards.admin</code></td></tr><tr><td>-</td><td>Standardmäßige Beispiel-Berechtigungen für Premium- oder Supreme-Belohnungen.</td><td><code>dailyrewards.premium</code> / <code>dailyrewards.supreme</code></td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Passe die GUI-Größen, Soundeffekte, MySQL-Anbindungen und deine täglichen Belohnungen (inkl. Premium-Ränge-Berechtigungen) flexibel in der Konfigurationsdatei an.

***

## Dateiübersicht

Das Plugin erstellt nach dem ersten Serverstart folgende Datei:

* **`plugins/DailyRewards/config.yml`**: Steuert alle globalen Einstellungen, Nachrichten und die genauen Belohnungs-Items.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Einstellungen" %}

#### Allgemeine Optionen

```yaml
# Der Präfix vor Systemmeldungen im Chat
prefix: '&7[&9Daily&6Rewards&7]'

# Ermöglicht das Öffnen des Menüs per Befehl
dailyrewardscmd: true

# Cooldown (in Sekunden) gegen GUI-Klick-Spam
clickslotcooldownsec: 300
```

{% endtab %}

{% tab title="🗄️ MySQL" %}

#### Datenbank-Optionen

```yaml
MySQL:
  enable: false
  host: localhost
  port: '3306'
  username: user
  database: db
  password: password123
```

* **`enable`**: Bei `true` werden die Beanspruchungs-Zeiten der Spieler in der MySQL-Datenbank gespeichert. Perfekt für Netzwerke mit mehreren Unterservern.
  {% endtab %}

{% tab title="🎨 GUI & Sound" %}

#### Kosmetische Optionen

```yaml
# Menü-Design
gui:
  name: '&7Tägliche Belohnung'
  lenght: 3 # Reihenanzahl (1-6)

# Name des Villager-NPCs
villagername: '&6Tägliche Belohnung'

# Sound beim Beanspruchen einer Belohnung
buysound: ENTITY_PLAYER_LEVELUP
```

{% endtab %}
{% endtabs %}

***

## Belohnungen konfigurieren (`rewards`)

Unter dem Key `rewards` definierst du die einzelnen Belohnungs-Slots. Jeder Slot-Eintrag kann drei Zustände haben:

1. **`claimable`**: Das Item, wenn die Belohnung bereit zum Abholen ist.
2. **`claimed`**: Das Item, wenn sich die Belohnung im Cooldown befindet.
3. **`blocked`** *(Optional)*: Das Item, wenn der Spieler nicht die nötige Permission besitzt.

### Konfigurations-Beispiele:

{% tabs %}
{% tab title="Standard-Belohnung" %}

```yaml
rewards:
  '10': # Slot 10 (Zweite Reihe, zweites Feld)
    permission: '' # Keine Berechtigung nötig
    cooldown: 86400 # 24 Stunden Cooldown in Sekunden
    cmds: # Ausgeführte Befehle
    - eco give %player% 1000
    claimed:
      material: OAK_LOG
      shortid: 0
      amount: 1
      name: '&7Coin-Belohnung'
      lore:
      - '&cGesperrt'
      - '&7Bereit in: &e%hour%h %min%m %sec%s'
    claimable:
      material: OAK_LOG
      shortid: 0
      amount: 1
      name: '&7Coin-Belohnung'
      lore:
      - '&b1000 Coins'
      - '&aKlicke zum Abholen!'
```

{% endtab %}

{% tab title="Premium-Belohnung (mit Permission)" %}

```yaml
  '13': # Slot 13
    permission: dailyrewards.premium # Erforderliche Permission
    cooldown: 86400
    cmds:
    - eco give %player% 2500
    blocked: # Anzeige, wenn Spieler KEINE Permission hat
      material: BARRIER
      shortid: 0
      amount: 1
      name: '&6Premium-Belohnung'
      lore:
      - '&cNur für Premium-Spieler!'
    claimed:
      material: OAK_LOG
      shortid: 0
      amount: 1
      name: '&6Premium-Belohnung'
      lore:
      - '&cGesperrt'
      - '&7Bereit in: &e%hour%h %min%m %sec%s'
    claimable:
      material: OAK_LOG
      shortid: 0
      amount: 1
      name: '&6Premium-Belohnung'
      lore:
      - '&b2500 Coins'
      - '&aKlicke zum Abholen!'
```

{% endtab %}
{% endtabs %}

***

## Systemnachrichten

Am Ende der Datei können die Ausgaben angepasst werden:

```yaml
messages:
  noperm: '&cDazu hast du keine Rechte'
```


# Eigene Belohnungen

In diesem Guide lernst du, wie du eigene tägliche Belohnungen (Daily Rewards) für Standard- und Premium-Spieler (VIPs) in deinem **DailyRewards**-Plugin konfigurierst.

***

## Grundlagen des Belohnungssystems

Belohnungen werden in einem GUI-Menü auf bestimmten Slots angezeigt. Du definierst für jede Belohnung:

1. **Den Slot-Index:** Bestimmt die Position im Menü (z. B. Slot `10`).
2. **Den Cooldown:** Wartezeit in Sekunden (z. B. `86400` für 24 Stunden), bis die Belohnung wieder abgeholt werden kann.
3. **Ausgeführte Befehle (`cmds`):** Eine Liste von Konsolenbefehlen, die bei Beanspruchung ausgeführt werden (z. B. Geld oder Items geben).
4. **Den Permission-Schutz:** Optional kannst du Belohnungen an Berechtigungen binden.

***

## Die drei Item-Zustände

Um dem Spieler das passende Icon im Menü anzuzeigen, benötigt jede Belohnung Definitionen für verschiedene Zustände:

* **`claimable` (Bereit zum Abholen):** Das Item, das angezeigt wird, wenn der Cooldown abgelaufen ist und der Spieler die Belohnung abholen darf.
* **`claimed` (Bereits abgeholt / Cooldown):** Das Item, das während des Cooldowns angezeigt wird. Hierbei werden Platzhalter wie `%hour%`, `%min%` und `%sec%` automatisch durch die Restzeit ersetzt.
* **`blocked` (Gesperrt / Keine Rechte):** Das Item, das angezeigt wird, wenn die Belohnung eine Permission erfordert, die der Spieler nicht besitzt.

***

## Konfigurations-Beispiel

Hier ist ein komplettes Beispiel für zwei Belohnungs-Typen in der `config.yml`:

```yaml
rewards:
  # -------------------------------------------------------------
  # 1. Standard-Belohnung (für alle Spieler)
  # -------------------------------------------------------------
  '10':
    permission: ''                # Keine Permission nötig
    cooldown: 86400               # 24 Stunden Cooldown
    cmds:
      - 'eco give %player% 1000'  # Gibt dem Spieler 1.000 Coins
    claimable:
      material: OAK_LOG
      amount: 1
      name: '&aTägliche Holzfäller-Belohnung'
      lore:
        - '&7Belohnung: &b1000 Coins'
        - '&aKlicke zum Abholen!'
    claimed:
      material: BOWL
      amount: 1
      name: '&7Belohnung bereits abgeholt'
      lore:
        - '&cBereits abgeholt!'
        - '&7Nächste Abholung in: &e%hour%h %min%m %sec%s'

  # -------------------------------------------------------------
  # 2. Premium-Belohnung (nur mit Permission)
  # -------------------------------------------------------------
  '13':
    permission: 'dailyrewards.premium' # Benötigt Berechtigung
    cooldown: 86400
    cmds:
      - 'eco give %player% 2500'
      - 'give %player% diamond 5'
    claimable:
      material: DIAMOND_BLOCK
      amount: 1
      name: '&6&lPremium Belohnung'
      lore:
        - '&7Belohnung: &b2500 Coins & &b5 Diamanten'
        - '&aKlicke zum Abholen!'
    claimed:
      material: COAL_BLOCK
      amount: 1
      name: '&7Premium Belohnung abgeholt'
      lore:
        - '&cBereits abgeholt!'
        - '&7Nächste Abholung in: &e%hour%h %min%m %sec%s'
    blocked:
      material: BARRIER
      amount: 1
      name: '&c&lPremium Belohnung'
      lore:
        - '&cNur für VIP-Spieler!'
        - '&7Kaufe VIP, um diese Belohnung freizuschalten.'
```

***

## Schritt-für-Schritt-Anleitung: Neue VIP-Belohnung anlegen

Hier siehst du, wie du eine neue exklusive Belohnung erstellst.

{% stepper %}
{% step %}

#### Slot & Permission wählen

Bestimme einen freien Slot im Menü (z. B. Slot `16`) und wähle eine Permission (z. B. `dailyrewards.vip`).
{% endstep %}

{% step %}

#### Belohnungs-Befehle definieren

Welche Befehle sollen ausgeführt werden? Zum Beispiel: `give %player% iron_ingot 10`
{% endstep %}

{% step %}

#### Item-Icons & Texte entwerfen

* Für **`claimable`** nehmen wir einen `IRON_BLOCK` mit grünem Text.
* Für **`claimed`** nehmen wir einen `IRON_ORE` mit der verbleibenden Cooldown-Zeit.
* Für **`blocked`** nehmen wir eine `BARRIER` mit rotem Hinweis.
  {% endstep %}

{% step %}

#### YAML in config.yml eintragen

Trage die Sektion unter `rewards` in der `config.yml` ein und führe danach `/dailyrewards reload` aus.
{% endstep %}
{% endstepper %}


# Beschreibung

Ein voll ausgestattetes, eigenständiges Free-for-All (FFA) PvP-Plugin mit integriertem Stats-System, Top-10-Wand, anpassbaren Kits und Spawn-Schutz.

{% hint style="success" %}
🤺 **Biete deinen Spielern ein packendes, fahrplanmäßiges FFA-PvP-Erlebnis ähnlich wie auf GommeHD.net!**
{% endhint %}

## Features

{% tabs %}
{% tab title="🤺 PvP & Gameplay" %}

#### Gameplay-Mechaniken

* **Sofortige Regeneration:** Erhalte bei jedem Kill sofort dein volles Leben zurück, um direkt weiterzukämpfen.
* **Killstreak-System:** Bei Erreichen einer Killstreak (z. B. 3 Kills in Folge) erfolgt ein globaler Broadcast im Chat und der Spieler erhält 2 Goldene Äpfel.
* **Inventar-Sortierung:** Spieler können ihr Kit-Inventar per `/invsort` frei anpassen und sortieren.
  {% endtab %}

{% tab title="⚙️ Setup & Schutz" %}

#### Arena-Konfiguration

* **Integrierter Spawn-Schutz:** Setze eine geschützte Spawn-Zone ganz ohne WorldGuard oder WorldEdit.
* **Globales Kit:** Richte die Hotbar und Rüstung im Spiel ein und speichere sie dauerhaft per Befehl.
* **Flackerfreies Scoreboard:** Speziell optimiertes Ingame-Scoreboard (deaktivierbar).
* **MySQL-Support:** Persistente Speicherung aller Kills, Deaths und Killstreaks.
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch.
{% endstep %}

{% step %}

#### Spawn & Schutz-Zone definieren

1. Setze den Hauptspawnpoint für die Arena mit `/setspawn`.
2. Um die schützende Spawn-Zone zu definieren, stelle dich an die erste Ecke und nutze `/setspawnpos 1`, an die gegenüberliegende Ecke und nutze `/setspawnpos 2`. *(Innerhalb dieses Bereiches können Spieler keinen Schaden erleiden oder austeilen)*
   {% endstep %}

{% step %}

#### Globales Kit speichern

1. Rüste dich mit der gewünschten Rüstung und den gewünschten Waffen/Items aus.
2. Führe `/savekit` aus, um dieses Inventar als Standard-Kit für alle Spieler zu speichern.
   {% endstep %}
   {% endstepper %}

***

### Platzhalter (PlaceholderAPI)

<table><thead><tr><th width="250">Platzhalter</th><th>Beschreibung</th></tr></thead><tbody><tr><td><code>%ffa_killstreak%</code></td><td>Gibt die aktuelle Killstreak des Spielers aus.</td></tr><tr><td><code>%ffa_kills%</code></td><td>Zeigt die Gesamt-Kills des Spielers an.</td></tr><tr><td><code>%ffa_deaths%</code></td><td>Zeigt die Gesamt-Tode des Spielers an.</td></tr></tbody></table>

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/setspawn</code></td><td>Setzt den Standard-Spawnpoint.</td><td><code>ffa.admin</code></td></tr><tr><td><code>/setspawnpos &#x3C;1/2></code></td><td>Definiert die Eckpunkte der geschützten Spawn-Zone.</td><td><code>ffa.admin</code></td></tr><tr><td><code>/savekit</code></td><td>Speichert deine aktuelle Rüstung/Hotbar als globales Kit.</td><td><code>ffa.admin</code></td></tr><tr><td><code>/settopwall &#x3C;1-10></code></td><td>Setzt ein Schild/Kopf-Paar für die Top-10-Bestenliste.</td><td><code>ffa.admin</code></td></tr><tr><td><code>/stats (Spieler)</code></td><td>Zeigt Kills, Deaths, KD und die höchste Killstreak an.</td><td>-</td></tr><tr><td><code>/invsort</code></td><td>Öffnet die Inventar-Sortierungs-GUI.</td><td>-</td></tr><tr><td><code>/top</code></td><td>Zeigt die Top 3 Spieler an.</td><td>-</td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Passe die MySQL-Anbindung, die Belohnungsbefehle pro Kill, die Scoreboard-Zeilen und alle In-Game-Nachrichten des **FFA**-Plugins flexibel in der `config.yml` an.

***

## Dateiübersicht

Das Plugin erstellt nach dem ersten Serverstart folgende Datei:

* **`plugins/FFA/config.yml`**: Verwaltet alle Spieloptionen, Chat-Nachrichten und das Scoreboard.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Einstellungen" %}

#### Allgemeine Optionen

```yaml
# Der Präfix vor Systemnachrichten im Chat
prefix: '&7[FFA]'

# Name der GUI zur Inventarsortierung
invsortname: '&eInvsortierung'

# Zusätzliche Konsolenbefehle bei Kills (z. B. Geldauszahlung)
killercmds:
- eco give %player% 100
```

{% endtab %}

{% tab title="🗄️ MySQL" %}

#### Datenbank-Optionen

> \[!WARNING] **Achtung Code-Schreibfehler:** Der Datenbank-Schlüssel in der MySQL-Sektion heißt **`datebase`** (mit "te" in der Mitte) statt `database`. Achte darauf beim Eintragen deines Datenbanknamens!

```yaml
MySQL:
  host: localhost
  port: '3306'
  username: user
  datebase: db # Schreibweise beachten!
  password: password123
```

{% endtab %}

{% tab title="🎮 Anzeige-Optionen" %}

#### Visuelle Optionen

```yaml
options:
  sb: false # Scoreboard aktivieren/deaktivieren
  healthdisplay: true # Lebenspunkte-Anzeige über den Spielernamen
```

{% endtab %}
{% endtabs %}

***

## Scoreboard-Konfiguration (`sb`)

Du kannst die Sidebar des Scoreboards frei editieren und Platzhalter verwenden (nur bis Minecraft 1.8.x empfohlen, für neuere Versionen empfiehlt sich SBPlus):

```yaml
sb:
  title: '&aDyroxplays.de'
  board:
  - '&a '
  - '&fMap:'
  - '&eMAPNAME'
  - '&b '
  - '&fKills:'
  - '&b%ffa_kills%'
  - '&c '
  - '&fDeaths: '
  - '&c%ffa_deaths%'
  - '&d '
  - '&fKillStreak:'
  - '&a%ffa_killstreak%'
  - '&e '
```

***

## Chat- und Systemnachrichten

```yaml
# Chat-Meldungen beim Betreten/Verlassen und bei Kills
joinmessage: '&e%player% &eist gejoint'
quitmessage: '&e%player% &eist geleavt'
killmessage: '&c%player% &ewurde von &a%killer% &cgetötet'
deathmessage: '&c%player% &eist gestorben'

# Systemausgaben
messages:
  noperm: '&cDazu hast du keine Rechte.'
  savekit: '&aKit wurde gespeichert.'
  invsortnothere: '&cDu kannst nur am Spawn deinen Inv sortieren!.'
  setspawn: '&aSpawn wurde gespeichert.'
  settopwall: '&cNutze: /settopwall <kills,deaths> <1-10>'
  setspawnpos: '&aSpawnPos %pos% wurde gespeichert.'
  usagesetspawnpos: '&cNutze: /spawnpos <1/2>'
  invsaved: '&aDein Inventar wurde gespeichert.'
  killstreak: '&a%player% hat ein KillStreak von %killstreak%.'

# Ausgabe des Befehls /stats
stats:
- '&eStats von %player%'
- '&fKills: %kills%'
- '&fDeaths: %deaths%'
- '&fK/D: %kd%'
- '&fRang: %rang%'
```


# Beschreibung

Bringe das klassische GunGame-Spielprinzip (PvP-Levelaufstieg bei Kills) auf deinen Server – inklusive Map-Voting, Spawn-Schutz, Bestenlisten und MySQL-Datenbank-Support.

{% hint style="success" %}
🪓 **Biete deinen Spielern eine authentische GunGame-Erfahrung ähnlich wie auf GommeHD.net!**
{% endhint %}

## Features

{% tabs %}
{% tab title="🪓 Level-PvP" %}

#### Spielprinzip

* **Level-Aufstieg:** Jeder Kill erhöht das Level des Spielers sofort und wertet die Ausrüstung (Waffen/Rüstung) auf.
* **Level-Abstieg:** Stirbt ein Spieler oder fällt ins Wasser/Leere, sinkt sein Level und die Ausrüstung wird zurückgestuft.
* **GommeHD.net-Voreinstellungen:** Vorkonfigurierte Level-Stufen, sodass du sofort ohne aufwendige Konfiguration starten kannst.
  {% endtab %}

{% tab title="🗺️ Welten & Maps" %}

#### Karten-Management

* **MultiMaps & Voting:** Unterstützung für mehrere Karten und Map-Voting-System.
* **Automatischer Map-Wechsel:** Der Server wechselt die Karte automatisch nach Ablauf des Timers.
* **Spawn-Schutz:** Eine integrierte Schutz-Zone an den Spawnpoints verhindert Spawn-Camping ganz ohne WorldGuard.
  {% endtab %}

{% tab title="📊 Stats & Rekorde" %}

#### Datenverwaltung

* **Statistik-System:** Erfasst Kills, Deaths, KD, aktuelles Level und das jemals erreichte Rekord-Level.
* **Bestenlisten:** Top-10-Statswand (Kopf/Schilder) und ein `/top`-Befehl für die Top 3 Spieler.
* **MySQL-Schnittstelle:** Synchronisiere alle Statistiken über dein gesamtes Servernetzwerk.
* **PlaceholderAPI Support:** Verwende Platzhalter wie `%gungame_level%`, `%gungame_rekord%`, `%gungame_kills%` und `%gungame_deaths%`.
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch.
{% endstep %}

{% step %}

#### Spawn & Schutz-Zone festlegen

1. Setze den Hauptspawnpoint für die Arena mit `/setspawn`.
2. Um die schützende Spawn-Zone zu definieren, stelle dich an die erste Ecke und nutze `/setspawnpos 1`, an die gegenüberliegende Ecke und nutze `/setspawnpos 2`. *(Innerhalb dieses Bereiches können Spieler keinen Schaden erleiden oder austeilen)*
   {% endstep %}

{% step %}

#### Top 10 Wand einrichten (Optional)

Baue eine Wand mit einem Spielerkopf (oben) und einem Schild (darunter). Stelle dich auf den Block des Kopfes und führe aus: `/settopwall <1-10>` (für die Ränge 1 bis 10).
{% endstep %}
{% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/setspawn</code></td><td>Setzt den Spawnpoint für die Spieler.</td><td><code>gungame.admin</code></td></tr><tr><td><code>/setspawnpos &#x3C;1/2></code></td><td>Definiert die Eckpunkte der geschützten Spawn-Zone.</td><td><code>gungame.admin</code></td></tr><tr><td><code>/settopwall &#x3C;1-10></code></td><td>Registriert ein Kopf/Schild-Paar für die Top-10-Wand.</td><td><code>gungame.admin</code></td></tr><tr><td><code>/stats (Spieler)</code></td><td>Zeigt Kills, Deaths, KD und das Rekord-Level eines Spielers an.</td><td>-</td></tr><tr><td><code>/top</code></td><td>Zeigt die Top 3 Spieler nach Kills an.</td><td>-</td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Gestalte das GunGame-Scoreboard, die MySQL-Anbindung, die Level-Grenzen und die automatischen Map-Wechsel flexibel in der `config.yml`.

***

## Dateiübersicht

Das Plugin erstellt nach dem ersten Serverstart folgende Datei:

* **`plugins/GunGame/config.yml`**: Verwaltet alle Spieloptionen, Chat-Nachrichten, Map-Votings und Bestenlisten.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Einstellungen" %}

#### Allgemeine Optionen

```yaml
# Der Präfix vor Chatnachrichten
prefix: '&7[GunGame]'

# Verhindert Schaden beim Herunterfallen
disablefalldamage: false

# Sendet Kills und Tode global an alle Welten
killanddeathmessageglobal: false

# Prüft, ob Spieler in Wasser oder auf halben Blöcken stehen
checkhalfblockwater: true
```

{% endtab %}

{% tab title="🗄️ MySQL" %}

#### Datenbank-Optionen

> \[!WARNING] **Achtung Code-Schreibfehler:** Der Datenbank-Schlüssel in der MySQL-Sektion heißt **`datebase`** (mit "te" in der Mitte) statt `database`. Achte darauf beim Eintragen deines Datenbanknamens!

```yaml
MySQL:
  host: localhost
  port: '3306'
  username: user
  datebase: db # Schreibweise beachten!
  password: password123
```

{% endtab %}

{% tab title="🎮 Gameplay & Maps" %}

#### Match-Optionen

```yaml
# Levelaufstieg-Wahrscheinlichkeiten
levelpercent:
  min: 1
  max: 25

# Visuelle Anzeigen
options:
  sb: true # Scoreboard aktivieren
  healthdisplay: true # Lebensanzeige über den Köpfen der Spieler

# Automatischer Mapwechsel
mapchaning: true
mapchaningminutes: 30 # Wechselt die Karte alle 30 Minuten
```

{% endtab %}

{% tab title="🗳️ Map-Voting" %}

#### Abstimmungs-Item

```yaml
mapvoting:
  enable: true
  guiname: '&bMapVoting'
  invitem:
    enable: true # Gibt Spielern ein Voting-Item ins Inventar
    sec: 30 # Dauer des Votings in Sekunden
    item: 8;MAP;&aMapvoting # Format: Slot;Material;Displayname
```

{% endtab %}
{% endtabs %}

***

## Scoreboard-Konfiguration (`sb`)

Du kannst die Sidebar des Scoreboards frei editieren und Platzhalter verwenden:

```yaml
sb:
  title: '&aDyroxplays.de'
  board:
  - '&a '
  - '&fMap:'
  - '&e%gungame_map%'
  - '&b '
  - '&fKills:'
  - '&b%gungame_kills%'
  - '&c '
  - '&fDeaths: '
  - '&c%gungame_deaths%'
  - '&d '
  - '&fLevelRekord:'
  - '&a%gungame_rekord%'
  - '&e '
```

***

## Chat- und Systemnachrichten

```yaml
# Chat-Meldungen beim Betreten/Verlassen und bei Kills
joinmessage: '&e%player% &eist gejoint'
quitmessage: '&e%player% &eist geleavt'
killmessage: '&c%player% &ewurde von &a%killer% &cgetötet'
deathmessage: '&c%player% &eist gestorben'

# Systemausgaben
messages:
  noperm: '&cDazu hast du keine Rechte.'
  newmap: '&aEs wird nun auf %map% gespielt.'
  changein: '&aMapchange in %sec% Sekunden.'
  setspawn:
    set: '&aSpawn für %map% wurde gespeichert.'
    usage: '&cNutze: /setspawn <MapName>'
  setspawnpos:
    set: '&aSpawnPos %pos% für %map% wurde gespeichert.'
    usage: '&cNutze: /spawnpos <MapName> <1/2>'
  settopwall: '&cNutze: /settopwall <kills,deaths> <1-10>'

# Ausgabe des Befehls /stats
stats:
- '&eStats von %player%'
- '&fKills: %kills%'
- '&fDeaths: %deaths%'
- '&fK/D: %kd%'
- '&fRang: %rang%'
```

***

## Statswand (Top 10 Schilder)

Konfiguriere das Layout der Schilder an der Statswand:

```yaml
topwall:
  kills:
    '1': 'Rang: %rang%'
    '2': ''
    '3': '%player%'
    '4': 'Kills: %kills%'
  deaths:
    '1': 'Rang: %rang%'
    '2': ''
    '3': '%player%'
    '4': 'Deaths: %deaths%'
```


# Beschreibung

Ein hochentwickeltes Live-Chat-Supportsytem für Minecraft-Server, das Spielern ermöglicht, direkt im Spiel Tickets zu erstellen und live mit Teammitgliedern zu chatten – inklusive Bewertungssystem und Live-Statusanzeige.

{% hint style="success" %}
☎️ **Ermögliche erstklassigen In-Game-Support mit einer 1-Klick-Ticketannahme und Spielerbewertungen!**
{% endhint %}

## Features

{% tabs %}
{% tab title="💬 Ticket-System" %}

#### Live-Chat-Support

* **Echtzeit-Support-Chat:** Nach Annahme des Tickets wird ein geschlossener Chatroom zwischen dem Spieler und dem Supporter geschaltet.
* **1-Klick-Annahme:** Supporters erhalten bei einem neuen Ticket eine interaktive Chat-Nachricht und können das Ticket mit nur einem Klick direkt annehmen.
* **Ticket-Übersicht:** Mit `/tickets` können Teammitglieder alle aktuell offenen Tickets einsehen und manuell auswählen.
  {% endtab %}

{% tab title="⭐ Bewertungssystem" %}

#### Supporter-Rating

* **Sternen-Bewertung:** Nach Schließen eines Tickets kann der Spieler den Support mit 1 bis 5 Sternen bewerten (über klickbare Chat-Sterne).
* **Statistiken abrufen:** Supporter und Admins können die durchschnittlichen Bewertungen und Statistiken per Befehl einsehen.
* **MySQL-Synchronisierung:** Erfordert eine MySQL-Verbindung (deaktivierbar).
  {% endtab %}

{% tab title="ℹ️ Status & Infos" %}

#### Visualisierung

* **Actionbar-Anzeige:** Zeigt den Spielern (oder nur dem Team) die Anzahl der aktuell aktiven Supporter direkt über der Hotbar an.
* **Duty-Status:** Teammitglieder können sich flexibel per `/support login` und `/support logout` an- und abmelden.
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch.
{% endstep %}

{% step %}

#### Konfiguration & MySQL einrichten

1. Starte den Server einmal, damit `/plugins/LiveSupport/` und die standardmäßige `config.yml` generiert werden.
2. Falls du das Bewertungssystem nutzen möchtest, trage deine MySQL-Datenbankverbindung in der `config.yml` ein.
3. Passe Nachrichten, Actionbar-Aktualisierungen und Permissions nach deinen Wünschen an.
   {% endstep %}

{% step %}

#### Support-Dienst starten

Teammitglieder können sich mit `/support login` in das System einwählen, um ab diesem Zeitpunkt über neue Tickets benachrichtigt zu werden.
{% endstep %}
{% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/support &#x3C;thema...></code></td><td>Erstellt ein neues Support-Ticket mit dem angegebenen Thema.</td><td><code>livesupport.use</code> <em>(wenn in Config aktiviert)</em></td></tr><tr><td><code>/support login</code></td><td>Meldet ein Teammitglied im Support-Dienst an.</td><td><code>livesupport.supporter</code></td></tr><tr><td><code>/support logout</code></td><td>Meldet ein Teammitglied vom Support-Dienst ab.</td><td><code>livesupport.supporter</code></td></tr><tr><td><code>/supportclose</code></td><td>Schließt das aktive Ticket (fordert Bestätigung per <code>confirm</code>).</td><td>- <em>(Teilnehmer des Tickets)</em></td></tr><tr><td><code>/tickets</code></td><td>Listet alle aktuell offenen Support-Tickets auf.</td><td><code>livesupport.supporter</code></td></tr><tr><td><code>/supporters</code></td><td>Listet alle Teammitglieder auf, die sich aktuell im Support-Dienst befinden.</td><td><code>livesupport.supporters</code></td></tr><tr><td><code>/supporterrating stats</code></td><td>Zeigt die Bewertungsstatistiken des Supporters an.</td><td><code>livesupport.ratestats</code> <em>(wenn in Config aktiviert)</em></td></tr><tr><td>-</td><td>Berechtigt zum Abgeben einer Bewertung (wenn in Config aktiviert).</td><td><code>livesupport.rate</code> <em>(wenn in Config aktiviert)</em></td></tr><tr><td>-</td><td>Erlaubt das Sehen der Actionbar-Anzeige (wenn in Config aktiviert).</td><td><code>livesupport.actionbar</code> <em>(wenn in Config aktiviert)</em></td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Passe die Systemnachrichten, Actionbar-Meldungen, MySQL-Verbindungen und das Supporter-Bewertungssystem flexibel in der `config.yml` an.

***

## Dateiübersicht

Das Plugin erstellt nach dem ersten Serverstart folgende Datei:

* **`plugins/LiveSupport/config.yml`**: Verwaltet alle Chat-Formatierungen, System-Nachrichten und das Bewertungssystem.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Einstellungen" %}

#### Allgemeine Optionen

```yaml
# Der Präfix vor Systemnachrichten
prefix: '&7[&aLiveSupport&7]'

# Wenn 'true', benötigen Spieler die Permission 'livesupport.use' zum Ticket-Erstellen
permissiontouse: false
```

{% endtab %}

{% tab title="🗄️ MySQL" %}

#### Datenbank-Optionen

```yaml
MySQL:
  host: localhost
  port: '3306'
  username: user
  datebase: db
  password: password123
```

* **MySQL**: Die Zugangsdaten werden zwingend für das Supporter-Rating (Bewertungssystem) benötigt, um die Daten persistent abzuspeichern.
  {% endtab %}

{% tab title="⭐ Bewertungssystem" %}

#### Supporter-Rating

```yaml
rating:
  enable: false # Aktiviert das Bewertungssystem
  permissiontorate: false # Benötigt die Permission 'livesupport.rate' zum Bewerten
  stars:
    notrated: '&7✶' # Symbol für unbewertete Sterne
    selected: '&6✶' # Symbol für ausgewählte Sterne
    '1':
      name: '&7✶'
      over: '&7schlecht' # Tooltip bei 1 Stern
    '2':
      name: '&7✶'
      over: '&7mangelhaft'
    '3':
      name: '&7✶'
      over: '&7mittelmäßig'
    '4':
      name: '&7✶'
      over: '&7gut'
    '5':
      name: '&7✶'
      over: '&7genial'
```

{% endtab %}

{% tab title="⏱️ Actionbar" %}

#### Live-Statusanzeige

```yaml
actionbar:
  enable: true # Zeigt die Actionbar an
  permissiontosee: false # Benötigt die Permission 'livesupport.actionbar' zum Sehen
  message: '&aAktuell sind &e%supporter% &aSupporter im Ticketsystem eingeloggt'
```

{% endtab %}
{% endtabs %}

***

## Systemnachrichten & Chat-Design

Alle Nachrichten sowie die Support-Chat-Formate lassen sich im Bereich `messages` anpassen:

```yaml
messages:
  noperm: '&cDazu hast du keine Rechte.'
  youhaveopenticket: '&cDu hast bereits ein Supportticket!'
  yourarechatting: '&cDu bist aktuell in einem Supportticket Gespräch!'
  yourarenotchatting: '&cDu bist aktuell in &4keinem &cSupportticket Gespräch!'
  yourarenotlogged: '&cDu bist nicht eingeloggt! &7Nutze /support login'
  yourarelogged: '&cDu bist eingeloggt, &7Nutze /support logout'
  login: '&aDu bist nun im Supportsystem eingeloggt'
  logout: '&cDu bist nun im Supportsystem ausgeloggt'
  youarechattingyoucantlogout: '&cDu bist in einem Supporgespräch du kannst dich jetzt nicht ausloggen!'
  playerhavenoopenticket: '&c%player% hat kein offenes Ticket!'
  ticketcreated: '&aDein Ticket wurde erstellt, bitte warte ein Teammitglied, sofern einer im Support online ist, wird sich um dich kümmern.'
  ticketcreatedteam: '&e%player% &ahat ein neues Ticket eingereicht, nutze &6/tickets &aum alle Tickets zu sehen und anzunehmen oder nehme direkt an: %accept%.'
  onlinesupporters:
    header: '&7=== Supporters &8[%total% online] &7==='
    footer: '&7========= Supporters &7========='
  rating:
    rate: '&aDu kannst den Support von %supporter% bewerten:'
    rated: '&aDu hast erfolgreich %supporter% mit %rate% bewertet'
    rateupdate: '&aDu hast erfolgreich %supporter% mit %rate% bewertet, deine bisherige Bewertung wurde überschrieben'
    notrateable: '&cDu warst mit diesem Spieler nicht im Support, deswegen kannst du ihn nicht bewerten'
    stats:
    - '&7Stats of %supporter%'
    - '&7Stars: %stars% &7(~%middle%, %amount%x)'
    offline: '&c%player% is offline'
  closedbysupporter: '&cDer Supporter &7%player%  &chat den Support geschlossen.'
  closedbyplayer: '&cDer Spieler &7%player% &chat den Support geschlossen.'
  closed: '&cDas Gespräch mit &7%player% &cwurde von dir aus geschlossen.'
  offlineclosed: '&c%player% ist offline gegangen, der Support wurde frühzeitig beendet.'
  confirm: '&aBitte bestätige mit /supportclose confirm, um den Support zu beendet'
  
  # Chat-Formate während der Ticket-Sitzung
  chatformat:
    suporter: '&c%player%&7: %msg%'
    asker: '&e%player%&7: %msg%'
    
  tickets:
    header: '&7=== SupportTickets &8[%total% Opentickets] &7==='
    footer: '&7========= SupportTickets &7========='
  acceptticket: '&aDu bist nun im Gespräch mit %player%, &calles was du in den Chat schreibst wird nun von %player% gesehen! &eZum Beenden schreibe &6/supportclose'
  youracceptticket: '&a%player% hat dein Supportticket angenommen, du bist nun im Gespräch mit %player%, &calles was du in den Chat schreibst &cwird nun von %player% gesehen! &eZum Beenden schreibe &6/supportclose'
  
  usage:
    support: '&cNutze: /support <Thema>'
    supportloginout: '&cNutze: /support login/logout'
```


# Beschreibung

Biete deinen Spielern eine ansprechende Übersicht über die reichsten Spieler deines Servers direkt in einer übersichtlichen, grafischen Benutzeroberfläche (GUI).

{% hint style="success" %}
🤑 **Fördere den Wettbewerb unter deinen Spielern durch eine Echtzeit-Reichtumsrangliste!**
{% endhint %}

## Features

{% tabs %}
{% tab title="🤑 Reichtums-GUI" %}

#### Rangliste

* **Grafische Darstellung:** Die Top-Spieler mit dem meisten Guthaben werden übersichtlich mit ihren Spielerköpfen und Kontoständen aufgelistet.
* **Bypass-Option:** Admins oder Teammitglieder können über eine Berechtigung (`moneytoplist.bypass`) von der Rangliste ausgeschlossen werden (z. B. damit Teammitglieder mit administrativem Geld die Liste nicht verfälschen).
  {% endtab %}

{% tab title="⚙️ Konfiguration" %}

#### Technik & Anpassung

* **Vault-Unterstützung:** Greift direkt auf dein bestehendes Wirtschaftssystem via Vault zu.
* **Volle UI-Anpassung:** Alle Item-Materialien, Namen und Lore-Texte der GUI-Elemente lassen sich frei konfigurieren.
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation & Abhängigkeiten

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch. Stelle sicher, dass **Vault** und ein Economy-Plugin (z. B. EssentialsX) installiert sind.
{% endstep %}

{% step %}

#### Server starten & konfigurieren

1. Starte den Server einmal, damit die Standardkonfiguration generiert wird.
2. Öffne `/plugins/MoneyTopList/config.yml` und passe das Design der GUI und der Lore-Texte nach deinen Vorstellungen an.
3. Starte den Server neu, um die Änderungen zu übernehmen.
   {% endstep %}
   {% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/moneytoplist</code></td><td>Öffnet die GUI mit den reichsten Spielern. (Alias: <code>/mtl</code>)</td><td><code>moneytoplist.use</code></td></tr><tr><td>-</td><td>Schließt den Spieler aus der Reichtumsliste aus (z. B. für Teamler).</td><td><code>moneytoplist.bypass</code></td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Passe die Ranking-Methoden, die GUI-Slots der Bestenliste, die Platzhalter und die MySQL-Anbindung (für interne oder externe Datenbanken) flexibel in der `config.yml` an.

***

## Dateiübersicht

Das Plugin erstellt nach dem ersten Serverstart folgende Datei:

* **`plugins/MoneyToplist/config.yml`**: Verwaltet alle Einstellungen zur Geldberechnung, GUI-Layouts und MySQL-Datenbanken.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Einstellungen" %}

#### Allgemeine Optionen

```yaml
# Der Präfix vor Systemnachrichten
prefix: "&7[&eMoneyToplist&7] "

# Zahlenformat für Kontostände
format: "#.##"

# Externe APIs & Permissions
use_placeholderapi: true
check_luckperms_bypass: true
```

* **`check_luckperms_bypass`**: Wenn `true`, werden Spieler mit der Permission `moneytoplist.bypass` (auch offline) von der Bestenliste ausgeschlossen.
  {% endtab %}

{% tab title="🏆 Ränge & Slots" %}

#### Listen-Steuerung

```yaml
# Methode zur Geldberechnung
ranking_method: "VAULT_OFFLINE"

ranks:
  # Anzahl der angezeigten Plätze
  amount: 5
  # GUI-Slots, auf denen die Plätze platziert werden
  slots: "13, 12, 14, 10, 16"
```

* **`ranks.slots`**: Die Anzahl der angegebenen Slots muss exakt mit der `amount` übereinstimmen.
  {% endtab %}

{% tab title="🎨 GUI & Deko" %}

#### Menü-Optionen

```yaml
gui:
  name: "&8» &eMoneyToplist"
  length: 3 # Reihenanzahl (1-6)

# Dekorative Hintergrundscheiben
placeholder:
  enable: true
  GRAY_STAINED_GLASS_PANE: "0-26"
  LIGHT_BLUE_STAINED_GLASS_PANE: "1,7,19,25"
```

{% endtab %}
{% endtabs %}

***

## Ranking-Methoden (`ranking_method`)

Wähle die passende Methode, wie das Plugin die reichsten Spieler ausliest:

<table><thead><tr><th width="250">Methode</th><th>Funktionsweise</th><th>Empfohlen für</th></tr></thead><tbody><tr><td><code>VAULT_OFFLINE</code></td><td>Liest asynchron alle Offline-Spieler über Vault aus.</td><td>Kompakte, lokale Server ohne MySQL.</td></tr><tr><td><code>PLACEHOLDER_API</code></td><td>Holt sich vorgefertigte Baltop-Daten von anderen Plugins (z. B. Essentials).</td><td>Server, die Baltop bereits anderweitig berechnen lassen.</td></tr><tr><td><code>EXTERNAL_MYSQL</code></td><td>Greift direkt auf eine externe Tabelle deines Wirtschafts-Plugins zu.</td><td>Netzwerke mit zentraler MySQL-Datenbank.</td></tr><tr><td><code>JOIN_EVENT</code></td><td>Speichert Kontostände nur ab, wenn Spieler den Server betreten.</td><td>Spezifische, ressourcensparende Setups.</td></tr></tbody></table>

***

## Datenbank-Optionen

{% tabs %}
{% tab title="🗄️ Interne MySQL" %}

#### Für JOIN\_EVENT Datenspeicherung

```yaml
MySQL:
  enable: false
  host: "localhost"
  port: "3306"
  username: "root"
  database: "db12"
  password: "password239239"
```

{% endtab %}

{% tab title="🔗 Externe MySQL" %}

#### Für EXTERNAL\_MYSQL Fremddaten-Auslesung

```yaml
mode_external_mysql:
  # Spaltennamen des externen Plugins (z. B. Essentials oder CMI)
  economy_table:
    table_name: "economy"
    column_money: "balance"
    column_uuid: "uuid"
    column_name: "playername" # Leer lassen "", falls nicht vorhanden

  # Verknüpfung der UUID mit den Namen in einer separaten Tabelle
  name_mapping:
    enable: false
    table_name: "players"
    column_uuid: "uuid"
    column_name: "name"
    
  fallback_minecraft_api: true
```

{% endtab %}
{% endtabs %}

***

## Top-Einträge & Item-Lore

```yaml
# Lore der Spieler-Köpfe in der Bestenliste
lore:
  - "&7Rang: &a%rank%"
  - "&7Money: &a%money% $"

# Automatisch generierte Platzhalter-Zuordnungen (bei PLACEHOLDER_API)
top:
  '1':
    name: "%essentials_baltop_player_1%"
    money: "%essentials_baltop_balance_1%"
  '2':
    name: "%essentials_baltop_player_2%"
    money: "%essentials_baltop_balance_2%"
```


# Beschreibung

Ein umfangreiches Perks-System mit Multi-Page GUI, Trank-Effekten, Schutz-Perks, Inventar-Management und vielem mehr für ein verbessertes Spielerlebnis!

{% hint style="success" %}
💎 **Biete deinen Spielern exklusive Vorteile und Fähigkeiten mit über 30+ Perks!**
{% endhint %}

## Übersicht

Das **Perks Plugin** ermöglicht es Server-Administratoren, ihren Spielern verschiedenste Vorteile und Fähigkeiten bereitzustellen. Durch ein intuitives GUI-System können Spieler ihre Perks selbst verwalten und aktivieren oder deaktivieren.

{% hint style="info" %}
**Kompatibilität**

* ✅ **Minecraft-Versionen:** 1.8.8 - 1.21+ (alle Versionen)
* ✅ **Server-Software:** Spigot, Paper und alle Forks
* ✅ **Rückwärtskompatibel:** Volle Unterstützung für Legacy-Versionen (1.8-1.12) mit shortid-System
  {% endhint %}

## Features

{% tabs %}
{% tab title="🎨 GUI & Bedienung" %}

#### GUI-System

* **Multi-Page GUI**: Unbegrenzt viele Seiten mit Perks möglich
* **Intuitive Bedienung**: Einfaches Ein- und Ausschalten von Perks per Klick
* **Status-Indikatoren**: Farbige Anzeige (Aktiviert/Deaktiviert/Gesperrt)
* **Pagination**: Automatische Vor- und Zurück-Navigation bei mehreren Seiten
* **Custom Items**: Vollständig anpassbare GUI-Items und Layouts
  {% endtab %}

{% tab title="⚗️ Effekte & Buffs" %}

#### Trank-Effekte

* **Dauerhaft aktiv**: Speed, Jump Boost, Strength, Regeneration etc.
* **Individual konfigurierbar**: Beliebige Potion-Effekte mit beliebiger Stärke
* **Weltbasierte Kontrolle**: Effekte können pro Welt deaktiviert werden
* **Bis Level 256**: Extrem starke Effekte möglich

#### Extra Herzen

* **Extra Hearts 5**: +5 zusätzliche Herzen (+10 HP)
* **Extra Hearts 10**: +10 zusätzliche Herzen (+20 HP)
* **Resistenz-Effekte**: Dauerhafte Schadensverringerung
  {% endtab %}

{% tab title="🛡️ Schutz" %}

#### Allgemeiner Schutz

* **No Fall Damage**: Keinen Fallschaden erleiden
* **No Hunger**: Hunger-Anzeige sinkt nicht mehr
* **No Explosion**: Kein Explosionsschaden
* **No Lava**: Kein Lavaschaden

#### Mob-Schutz

Schutz vor **beliebigen Mob-Typen**:

* Creeper, Zombie, Skeleton, Spider, Enderman
* Blaze, Ghast, Slime, Guardian, Piglin
* Warden, Wither, Ender Dragon, und viele mehr!

{% hint style="info" %}
Du kannst für **jeden** Minecraft Entity-Typ einen eigenen Schutz-Perk erstellen!
{% endhint %}
{% endtab %}

{% tab title="💼 Inventar & Items" %}

#### Inventar-Management

* **Keep Inventory**: Gesamtes Inventar beim Tod behalten
* **Keep Hotbar**: Nur die Hotbar beim Tod behalten
* **Keep XP**: Erfahrungspunkte beim Tod behalten
* **Drop to Inventory**: Abgebaute Blöcke landen direkt im Inventar

#### Item-Features

* **Instant Smelt**: Erze werden automatisch geschmolzen abgebaut
* **Spawner-Abbau**: Spawner können aufgehoben werden
  {% endtab %}

{% tab title="⭐ XP & Leveling" %}

#### XP-Multiplikatoren

* **Double XP**: Doppelte Erfahrungspunkte (2x)
* **Quad XP**: Vierfache Erfahrungspunkte (4x)
* **Keep XP**: XP bleiben beim Tod erhalten

{% hint style="success" %}
Perfect für Grinding und schnelles Leveling!
{% endhint %}
{% endtab %}

{% tab title="🌱 Spezial-Perks" %}

#### Gärtner-Perks

* **Gardener 1**: Pflanzen wachsen beim Sneaken (1x1 Radius)
* **Gardener 2**: Pflanzen wachsen beim Sneaken (3x3 Radius)
* **Cooldown-System**: Zeitbasierte Abklingzeiten verhindern Spam

#### Sonstige

* **Fly**: Flug-Modus (auf eigenem Plot oder überall)
* **Color Chat**: Farbiger Chat mit `&` Codes
  {% endtab %}

{% tab title="🔧 Technisch" %}

#### Technische Features

* ✅ **Permission-System:** Jeder Perk an Permissions bindbar
* ✅ **Welt-Blacklist:** Perks pro Welt deaktivierbar
* ✅ **MySQL-Speicherung:** Persistente Daten über Server-Neustarts
* ✅ **PlaceholderAPI-Support:** Vollständige Integration
* ✅ **PlotSquared Support:** Kompatibel v5, v6, v7 (optional)
* ✅ **Async-Optimiert:** Ressourcenschonend
* ✅ **HEX-Farben:** Support ab Minecraft 1.16+
* ✅ **Reload-System:** Ohne Server-Neustart
  {% endtab %}
  {% endtabs %}

## Installation

{% stepper %}
{% step %}

#### Download & Installation

Lade die neueste Version der `Perks` herunter \[<https://panel.dyroxplays.de/downloads>]\
In der Zip findest du 2 jars:<br>

a) Eine mit "1.13+" im Namen, diese Version nutzt du für alle Serverversionen, AB der 1.13 (und auch NUR diese jar nutzen, nicht beide!). D.h. auch für zB 1.21.10 nutzt du die "1.13+" jar.

\
b) Für Server, die älter als 1.13 sind, also 1.8.8 - 1.12.2, nutzt du die Jar OHNE "1.13+" im Namen (und auch NUR diese jar nutzen, nicht beide!).
{% endstep %}

{% step %}

#### Erste Konfiguration

Starte den Server, um die Config-Dateien zu generieren. Das Plugin erstellt automatisch:

* `config.yml` - Hauptkonfiguration
* MySQL-Tabellen (beim ersten Verbindungsaufbau)
  {% endstep %}

{% step %}

#### MySQL-Setup

Trage deine MySQL-Daten in die `config.yml` ein:

```yaml
MySQL:
  host: localhost
  port: '3306'
  username: dein_username
  datebase: dein_datenbankname
  password: 'dein_passwort'
```

{% endstep %}

{% step %}

#### Server-Neustart

Starte den Server neu. Das Plugin ist nun einsatzbereit!
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
**Wichtig:** Die MySQL-Datenbank muss bereits existieren. Das Plugin erstellt nur die Tabellen automatisch.
{% endhint %}

### Abhängigkeiten

<table><thead><tr><th width="200">Komponente</th><th width="150">Status</th><th>Details</th></tr></thead><tbody><tr><td><strong>Spigot/Paper</strong></td><td>✅ Erforderlich</td><td>Minecraft 1.8.8 - 1.21+</td></tr><tr><td><strong>MySQL/MariaDB</strong></td><td>✅ Erforderlich</td><td>Für die Datenspeicherung</td></tr><tr><td><strong>PlaceholderAPI</strong></td><td>📦 Optional</td><td>Für Placeholder-Integration (empfohlen)</td></tr><tr><td><strong>PlotSquared</strong></td><td>📦 Optional</td><td>Für Plot-basierte Fly-Berechtigung (v5, v6, v7)</td></tr></tbody></table>

## Commands

<table><thead><tr><th width="250">Command</th><th>Beschreibung</th><th width="150">Permission</th></tr></thead><tbody><tr><td><code>/perks</code></td><td>Öffnet das Perks-GUI</td><td>-</td></tr><tr><td><code>/perks reload</code></td><td>Lädt die Konfiguration neu (ohne Server-Neustart)</td><td><code>perks.admin</code></td></tr></tbody></table>

## Permissions

<table><thead><tr><th width="300">Permission</th><th>Beschreibung</th></tr></thead><tbody><tr><td><code>perks.admin</code></td><td>Erlaubt Zugriff auf administrative Befehle</td></tr><tr><td><code>perks.*</code></td><td>Gibt Zugriff auf alle Perks (nicht empfohlen)</td></tr><tr><td><code>perks.&#x3C;perkname></code></td><td>Individuell definierbar in der Config</td></tr></tbody></table>

{% tabs %}
{% tab title="Beispiele" %}

```
perks.no_fall_damage          # No Fall Damage Perk
perks.fly                      # Fly Perk
perks.keep_inv                 # Keep Inventory Perk
perks.potion_effect_speed_-1_1 # Speed II Perk
perks.extra_hearts_10          # 10 Extra Herzen
```

{% endtab %}

{% tab title="Gruppenweise" %}

```
# VIP-Perks
perks.no_fall_damage
perks.no_hunger
perks.double_xp

# VIP+-Perks
perks.fly
perks.keep_hotbar
perks.quad_xp

# Premium-Perks
perks.keep_inv
perks.extra_hearts_10
perks.gardener_2
```

{% endtab %}
{% endtabs %}

## Support & Links

{% hint style="info" %}
**Hilfe benötigt?** Hier findest du weitere Ressourcen:
{% endhint %}

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Diese Seite erklärt die vollständige Konfiguration des Perks Plugins und zeigt, wie du eigene Perks erstellen kannst.

{% hint style="info" %}
**Tipp:** Nach Änderungen an der Config kannst du `/perks reload` verwenden, um die Änderungen ohne Server-Neustart zu laden.
{% endhint %}

## Grundkonfiguration

{% code title="config.yml example" expandable="true" %}

```yml
# ##// Plugin Coded by Dyroxplays. \##

prefix: '&7[&6Perks&7]'
GARDENER_COOLDOWN_MS: 15000
replacementplaceholders:
  timer_GARDENER:
    current: '%min%:%sec%'
    empty: ''
  timer_FLY:
    current: '%min%:%sec%'
    empty: ''
  status:
    enabled: '&aAktiviert'
    disabled: '&7Deaktiviert'
    blocked: '&cNicht freigeschalten'
gui:
  name: '                &6&lPerks'
  lenght: 6
placeholder:
  enable: true
  BLACK_STAINED_GLASS_PANE: 0-53
fly:
  sec: 5
  message: '&cDu kannst nur noch &e%sec% Sekunden &cfliegen'
  blockedworld:
  - world
instantsmel:
- SAND-GLASS
- COBBLESTONE-STONE
messages:
  noperm: '&cDazu hast du keine Rechte'
MySQL:
  host: 172.18.0.1
  port: '3306'
  username: xx
  datebase: xx
  password: xxxx
items:
  prevPage:
    material: PLAYER_HEAD
    skullowner: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjdhYWNhZDE5M2UyMjI2OTcxZWQ5NTMwMmRiYTQzMzQzOGJlNDY0NGZiYWI1ZWJmODE4MDU0MDYxNjY3ZmJlMiJ9fX0=
    name: '&7«'
    slot: 52
  nextPage:
    material: PLAYER_HEAD
    skullowner: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTliZjMyOTJlMTI2YTEwNWI1NGViYTcxM2FhMWIxNTJkNTQxYTFkODkzODgyOWM1NjM2NGQxNzhlZDIyYmYifX19
    name: '&7»'
    slot: 53
  enabled:
    material: LIME_DYE
    name: '&aAktiviert'
  disabled:
    material: GRAY_DYE
    name: '&7Deaktiviert'
  blocked:
    material: RED_DYE
    name: '&cNicht freigeschalten'
    lore:
    - '&cFür diesen Perk hast du aktuell keine Rechte'
perks:
  '1':
    NO_FALL_DAMAGE:
      enable: true
      perkType: NO_FALL_DAMAGE
      permission: perks.no_fall_damage
      material: NETHERITE_BOOTS
      amount: 1
      name: '&6Kein Fallschaden'
      lore:
      - '&8&m----------'
      - '&7Du erhältst keinen Fallschaden mehr.'
      slot: 10
      infoslot: 11
      blockedworld:
      - world_nether
    NO_HUNGER:
      enable: true
      perkType: NO_HUNGER
      permission: perks.no_hunger
      material: COOKED_BEEF
      amount: 1
      name: '&6Kein Hunger'
      lore:
      - '&8&m----------'
      - '&7Deine Hunger-Anzeige sinkt nicht mehr.'
      slot: 19
      infoslot: 20
      blockedworld:
      - world_nether
    FLY:
      enable: true
      perkType: FLY
      permission: perks.fly
      material: FEATHER
      amount: 1
      name: '&6Fly'
      lore:
      - '&8&m----------'
      - '&7Flug-Modus auf dem eigenen Plot'
      slot: 28
      infoslot: 29
      blockedworld:
      - world_nether
    POTION_EFFECT_REGENERATION_-1_1:
      enable: true
      perkType: POTION_EFFECT;REGENERATION;-1;1
      permission: perks.potion_effect_regeneration_-1_1
      material: GOLDEN_APPLE
      amount: 1
      name: '&dRegeneration+'
      lore:
      - '&8&m----------'
      - '&7Regeneration 2 Effekt.'
      slot: 37
      infoslot: 38
      blockedworld:
      - world_nether
    POTION_EFFECT_REGENERATION_-1_3:
      enable: true
      perkType: POTION_EFFECT;REGENERATION;-1;3
      permission: perks.potion_effect_regeneration_-1_3
      material: ENCHANTED_GOLDEN_APPLE
      amount: 1
      name: '&dRegeneration+2'
      lore:
      - '&8&m----------'
      - '&7Regeneration 4 Effekt.'
      slot: 14
      infoslot: 15
      blockedworld:
      - world_nether
    POTION_EFFECT_SPEED_-1_0:
      enable: true
      perkType: POTION_EFFECT;SPEED;-1;0
      permission: perks.potion_effect_speed_-1_0
      material: SUGAR
      amount: 1
      name: '&bSchnelligkeit+'
      lore:
      - '&8&m----------'
      - '&7+20% Geschwindigkeit.'
      slot: 23
      infoslot: 24
      blockedworld:
      - world_nether
    POTION_EFFECT_SPEED_-1_1:
      enable: true
      perkType: POTION_EFFECT;SPEED;-1;1
      permission: perks.potion_effect_speed_-1_1
      material: FEATHER
      amount: 1
      name: '&bSchnelligkeit+2'
      lore:
      - '&8&m----------'
      - '&7Verbesserte Geschwindigkeit.'
      slot: 32
      infoslot: 33
      blockedworld:
      - world_nether
    POTION_EFFECT_FAST_DIGGING_-1_1:
      enable: true
      perkType: POTION_EFFECT;FAST_DIGGING;-1;1
      permission: perks.potion_effect_fast_digging_-1_1
      material: GOLDEN_PICKAXE
      amount: 1
      name: '&eEile+'
      lore:
      - '&8&m----------'
      - '&7Eile 2 Effekt.'
      slot: 41
      infoslot: 42
      blockedworld:
      - world_nether
  '2':
    POTION_EFFECT_FAST_DIGGING_-1_3:
      enable: true
      perkType: POTION_EFFECT;FAST_DIGGING;-1;3
      permission: perks.potion_effect_fast_digging_-1_3
      material: NETHERITE_PICKAXE
      amount: 1
      name: '&eEile+2'
      lore:
      - '&8&m----------'
      - '&7Eile 4 Effekt.'
      slot: 10
      infoslot: 11
      blockedworld:
      - world_nether
    POTION_EFFECT_DAMAGE_RESISTANCE_-1_1:
      enable: true
      perkType: POTION_EFFECT;DAMAGE_RESISTANCE;-1;1
      permission: perks.potion_effect_damage_resistance_-1_1
      material: IRON_CHESTPLATE
      amount: 1
      name: '&9Resistenz+'
      lore:
      - '&8&m----------'
      - '&7Resistenz 2 Effekt.'
      slot: 19
      infoslot: 20
      blockedworld:
      - world_nether
    POTION_EFFECT_DAMAGE_RESISTANCE_-1_3:
      enable: true
      perkType: POTION_EFFECT;DAMAGE_RESISTANCE;-1;3
      permission: perks.potion_effect_damage_resistance_-1_3
      material: NETHERITE_CHESTPLATE
      amount: 1
      name: '&9Resistenz+2'
      lore:
      - '&8&m----------'
      - '&7Resistenz 4 Effekt.'
      slot: 28
      infoslot: 29
      blockedworld:
      - world_nether
    POTION_EFFECT_INCREASE_DAMAGE_-1_0:
      enable: true
      perkType: POTION_EFFECT;INCREASE_DAMAGE;-1;0
      permission: perks.potion_effect_increase_damage_-1_0
      material: IRON_SWORD
      amount: 1
      name: '&cStärke+'
      lore:
      - '&8&m----------'
      - '&7Erhöhter Angriffsschaden.'
      slot: 37
      infoslot: 38
      blockedworld:
      - world_nether
    POTION_EFFECT_INCREASE_DAMAGE_-1_1:
      enable: true
      perkType: POTION_EFFECT;INCREASE_DAMAGE;-1;1
      permission: perks.potion_effect_increase_damage_-1_1
      material: NETHERITE_SWORD
      amount: 1
      name: '&cStärke+2'
      lore:
      - '&8&m----------'
      - '&7Massiver Angriffsschaden.'
      slot: 14
      infoslot: 15
      blockedworld:
      - world_nether
    POTION_EFFECT_FIRE_RESISTANCE_-1_0:
      enable: true
      perkType: POTION_EFFECT;FIRE_RESISTANCE;-1;0
      permission: perks.potion_effect_fire_resistance_-1_0
      material: LAVA_BUCKET
      amount: 1
      name: '&6Feuerresistenz+'
      lore:
      - '&8&m----------'
      - '&7Du erhältst keinen Feuerschaden.'
      slot: 23
      infoslot: 24
      blockedworld:
      - world_nether
    POTION_EFFECT_WATER_BREATHING_-1_0:
      enable: true
      perkType: POTION_EFFECT;WATER_BREATHING;-1;0
      permission: perks.potion_effect_water_breathing_-1_0
      material: WATER_BUCKET
      amount: 1
      name: '&3Unterwasseratmung+'
      lore:
      - '&8&m----------'
      - '&7Du hast unbegrenzt Luft.'
      slot: 32
      infoslot: 33
      blockedworld:
      - world_nether
    POTION_EFFECT_NIGHT_VISION_-1_0:
      enable: true
      perkType: POTION_EFFECT;NIGHT_VISION;-1;0
      permission: perks.potion_effect_night_vision_-1_0
      material: ENDER_EYE
      amount: 1
      name: '&fNachtsicht+'
      lore:
      - '&8&m----------'
      - '&7Nachtsicht-Effekt.'
      slot: 41
      infoslot: 42
      blockedworld:
      - world_nether
  '3':
    POTION_EFFECT_INVISIBILITY_-1_0:
      enable: true
      perkType: POTION_EFFECT;INVISIBILITY;-1;0
      permission: perks.potion_effect_invisibility_-1_0
      material: POTION
      amount: 1
      name: '&7Unsichtbarkeit+'
      lore:
      - '&8&m----------'
      - '&7Unsichtbarkeit-Effekt.'
      slot: 10
      infoslot: 11
      blockedworld:
      - world_nether
    DOUBLE_XP:
      enable: true
      perkType: DOUBLE_XP
      permission: perks.double_xp
      material: EXPERIENCE_BOTTLE
      amount: 2
      name: '&aDoppelte XP'
      lore:
      - '&8&m----------'
      - '&7Doppelte Menge an XP.'
      slot: 19
      infoslot: 20
      blockedworld:
      - world_nether
    QUAD_XP:
      enable: true
      perkType: QUAD_XP
      permission: perks.quad_xp
      material: EXPERIENCE_BOTTLE
      amount: 4
      name: '&aVierfach XP'
      lore:
      - '&8&m----------'
      - '&7Vierfache Menge an XP.'
      slot: 28
      infoslot: 29
      blockedworld:
      - world_nether
    KEEP_HOTBAR:
      enable: true
      perkType: KEEP_HOTBAR
      permission: perks.keep_hotbar
      material: CHEST
      amount: 1
      name: '&6KeepHotbar'
      lore:
      - '&8&m----------'
      - '&7Hotbar ist beim Tod sicher.'
      slot: 37
      infoslot: 38
      blockedworld:
      - world_nether
    KEEP_INV:
      enable: true
      perkType: KEEP_INV
      permission: perks.keep_inv
      material: ENDER_CHEST
      amount: 1
      name: '&6KeepInventory'
      lore:
      - '&8&m----------'
      - '&7Inventar ist beim Tod sicher.'
      slot: 14
      infoslot: 15
      blockedworld:
      - world_nether
    KEEP_XP:
      enable: true
      perkType: KEEP_XP
      permission: perks.keep_xp
      material: EXPERIENCE_BOTTLE
      amount: 1
      name: '&6KeepXP'
      lore:
      - '&8&m----------'
      - '&7XP sind beim Tod sicher.'
      slot: 23
      infoslot: 24
      blockedworld:
      - world_nether
    DROP_TO_INV:
      enable: true
      perkType: DROP_TO_INV
      permission: perks.drop_to_inv
      material: HOPPER
      amount: 1
      name: '&6DropToInv'
      lore:
      - '&8&m----------'
      - '&7Abgebaute Blöcke landen'
      - '&7direkt in deinem Inventar.'
      slot: 32
      infoslot: 33
      blockedworld:
      - world_nether
    EXTRA_HEARTS_5:
      enable: true
      perkType: EXTRA_HEARTS_5
      permission: perks.extra_hearts_5
      material: REDSTONE
      amount: 5
      name: '&c5 Extra-Herzen'
      lore:
      - '&8&m----------'
      - '&7Du erhältst 5 zusätzliche Herzen.'
      slot: 41
      infoslot: 42
      blockedworld:
      - world_nether
  '4':
    EXTRA_HEARTS_10:
      enable: true
      perkType: EXTRA_HEARTS_10
      permission: perks.extra_hearts_10
      material: NETHER_STAR
      amount: 10
      name: '&c10 Extra-Herzen'
      lore:
      - '&8&m----------'
      - '&7Du erhältst 10 zusätzliche Herzen.'
      slot: 10
      infoslot: 11
      blockedworld:
      - world_nether
    NO_CREEPER_DAMAGE:
      enable: true
      perkType: NO_CREEPER_DAMAGE
      permission: perks.no_creeper_damage
      material: CREEPER_SPAWN_EGG
      amount: 1
      name: '&6Kein Creeper-Schaden'
      lore:
      - '&8&m----------'
      - Creeper fügen dir keinen Schaden zu.
      slot: 19
      infoslot: 20
      blockedworld:
      - world_nether
    NO_BLAZE_DAMAGE:
      enable: true
      perkType: NO_BLAZE_DAMAGE
      permission: perks.no_blaze_damage
      material: BLAZE_SPAWN_EGG
      amount: 1
      name: '&6Kein Lohen-Schaden'
      lore:
      - '&8&m----------'
      - Lohen fügen dir keinen Schaden zu.
      slot: 28
      infoslot: 29
      blockedworld:
      - world_nether
    NO_ENDERMAN_DAMAGE:
      enable: true
      perkType: NO_ENDERMAN_DAMAGE
      permission: perks.no_enderman_damage
      material: ENDERMAN_SPAWN_EGG
      amount: 1
      name: '&6Kein Enderman-Schaden'
      lore:
      - '&8&m----------'
      - Enderman fügen dir keinen Schaden zu.
      slot: 37
      infoslot: 38
      blockedworld:
      - world_nether
    NO_SPIDER_DAMAGE:
      enable: true
      perkType: NO_SPIDER_DAMAGE
      permission: perks.no_spider_damage
      material: SPIDER_SPAWN_EGG
      amount: 1
      name: '&6Kein Spinnen-Schaden'
      lore:
      - '&8&m----------'
      - Spinnen fügen dir keinen Schaden zu.
      slot: 14
      infoslot: 15
      blockedworld:
      - world_nether
    NO_ZOMBIE_DAMAGE:
      enable: true
      perkType: NO_ZOMBIE_DAMAGE
      permission: perks.no_zombie_damage
      material: ZOMBIE_SPAWN_EGG
      amount: 1
      name: '&6Kein Zombie-Schaden'
      lore:
      - '&8&m----------'
      - Zombie fügen dir keinen Schaden zu.
      slot: 23
      infoslot: 24
      blockedworld:
      - world_nether
    NO_GHAST_DAMAGE:
      enable: true
      perkType: NO_GHAST_DAMAGE
      permission: perks.no_ghast_damage
      material: GHAST_SPAWN_EGG
      amount: 1
      name: '&6Kein Ghast-Schaden'
      lore:
      - '&8&m----------'
      - Ghast fügen dir keinen Schaden zu.
      slot: 32
      infoslot: 33
      blockedworld:
      - world_nether
    NO_SKELETON_DAMAGE:
      enable: true
      perkType: NO_SKELETON_DAMAGE
      permission: perks.no_skeleton_damage
      material: SKELETON_SPAWN_EGG
      amount: 1
      name: '&6Kein Skelett-Schaden'
      lore:
      - '&8&m----------'
      - Skelett fügen dir keinen Schaden zu.
      slot: 41
      infoslot: 42
      blockedworld:
      - world_nether
  '5':
    NO_SLIME_DAMAGE:
      enable: true
      perkType: NO_SLIME_DAMAGE
      permission: perks.no_slime_damage
      material: SLIME_SPAWN_EGG
      amount: 1
      name: '&6Kein Schleim-Schaden'
      lore:
      - '&8&m----------'
      - Schleim fügen dir keinen Schaden zu.
      slot: 10
      infoslot: 11
      blockedworld:
      - world_nether
    NO_GUARDIAN_DAMAGE:
      enable: true
      perkType: NO_GUARDIAN_DAMAGE
      permission: perks.no_guardian_damage
      material: GUARDIAN_SPAWN_EGG
      amount: 1
      name: '&6Kein Wächter-Schaden'
      lore:
      - '&8&m----------'
      - Wächter fügen dir keinen Schaden zu.
      slot: 19
      infoslot: 20
      blockedworld:
      - world_nether
    NO_ZOMBIFIED_PIGLIN_DAMAGE:
      enable: true
      perkType: NO_ZOMBIFIED_PIGLIN_DAMAGE
      permission: perks.no_zombified_piglin_damage
      material: ZOMBIFIED_PIGLIN_SPAWN_EGG
      amount: 1
      name: '&6Kein Pigman-Schaden'
      lore:
      - '&8&m----------'
      - Pigman fügen dir keinen Schaden zu.
      slot: 28
      infoslot: 29
      blockedworld:
      - world_nether
    GARDENER_1:
      enable: true
      perkType: GARDENER_1
      permission: perks.gardener_1
      material: WHEAT_SEEDS
      amount: 1
      name: '&2Gärtner'
      lore:
      - '&8&m----------'
      - '&7Pflanzen wachsen schneller (Sneaken).'
      slot: 37
      infoslot: 38
      blockedworld:
      - world_nether
    GARDENER_2:
      enable: true
      perkType: GARDENER_2
      permission: perks.gardener_2
      material: PUMPKIN_SEEDS
      amount: 1
      name: '&2Gärtner+'
      lore:
      - '&8&m----------'
      - '&73x3 Pflanzen wachsen schneller (Sneaken).'
      slot: 14
      infoslot: 15
      blockedworld:
      - world_nether

```

{% endcode %}

### Prefix

{% tabs %}
{% tab title="Standard" %}

```yaml
prefix: '&7[&6Perks&7]'
```

Der Prefix wird vor allen Plugin-Nachrichten angezeigt.
{% endtab %}

{% tab title="Mit HEX-Farben (1.16+)" %}

```yaml
prefix: '&#FF5500[&#FFD700Perks&#FF5500]'
```

{% hint style="success" %}
HEX-Farben werden automatisch in Minecraft 1.16+ unterstützt!
{% endhint %}
{% endtab %}

{% tab title="Mit Gradient" %}

```yaml
prefix: '&#FF0000[&#FF5500P&#FFAA00e&#FFD700r&#FFAA00k&#FF5500s&#FF0000]'
```

Erstelle beeindruckende Farbverläufe!
{% endtab %}
{% endtabs %}

### Cooldowns

```yaml
GARDENER_COOLDOWN_MS: 15000  # 15 Sekunden in Millisekunden
```

{% hint style="warning" %}
**Hinweis:** Die Zeit wird in **Millisekunden** angegeben.

15000 ms = 15 Sekunden
{% endhint %}

### Fly-Einstellungen

```yaml
fly:
  sec: 5  # Warnzeit in Sekunden bevor der Fly-Modus endet
  message: '&cDu kannst nur noch &e%sec% Sekunden &cfliegen'
  blockedworld:
    - world  # Welten, in denen Fly nicht funktioniert
```

### Instant Smelt

```yaml
instantsmel:
  - SAND-GLASS        # Sand wird zu Glas
  - COBBLESTONE-STONE # Cobblestone wird zu Stone
```

{% hint style="info" %}
**Format:** `URSPRUNG-ERGEBNIS`
{% endhint %}

<details>

<summary>📦 Weitere Instant Smelt Beispiele</summary>

```yaml
instantsmel:
  - SAND-GLASS
  - RED_SAND-GLASS
  - COBBLESTONE-STONE
  - IRON_ORE-IRON_INGOT
  - GOLD_ORE-GOLD_INGOT
  - COPPER_ORE-COPPER_INGOT
  - ANCIENT_DEBRIS-NETHERITE_SCRAP
  - WET_SPONGE-SPONGE
  - CLAY-TERRACOTTA
  - NETHERRACK-NETHER_BRICK
```

</details>

### Nachrichten

```yaml
messages:
  noperm: '&cDazu hast du keine Rechte'
```

***

## MySQL-Einstellungen

{% tabs %}
{% tab title="Lokaler Server" %}

```yaml
MySQL:
  host: localhost
  port: '3306'
  username: minecraft
  datebase: perks
  password: 'deinPasswort123'
```

{% endtab %}

{% tab title="Externer Server" %}

```yaml
MySQL:
  host: 172.18.0.1      # MySQL Server IP
  port: '3306'           # MySQL Port
  username: username     # MySQL Benutzername
  datebase: database     # Datenbank-Name
  password: password     # MySQL Passwort
```

{% endtab %}

{% tab title="Mit Custom Port" %}

```yaml
MySQL:
  host: db.example.com
  port: '3307'           # Custom Port
  username: perks_user
  datebase: minecraft_perks
  password: 'sicheres_passwort!'
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
**Wichtig:** Die Datenbank muss bereits existieren! Das Plugin erstellt nur automatisch die benötigten Tabellen.
{% endhint %}

{% hint style="success" %}
**Tipp:** Nutze ein starkes Passwort für die MySQL-Verbindung!
{% endhint %}

***

## GUI-Konfiguration

### Allgemeine GUI-Einstellungen

```yaml
gui:
  name: '                &6&lPerks'  # Name des Inventars
  lenght: 6                           # Größe in Zeilen (1-6)
```

### Placeholder-Items

Placeholder-Items werden als Hintergrund verwendet:

```yaml
placeholder:
  enable: true                         # Aktiviert/Deaktiviert Placeholder
  BLACK_STAINED_GLASS_PANE: 0-53      # Material und Slots (alle Slots)
```

**Weitere Beispiele:**

```yaml
placeholder:
  enable: true
  GRAY_STAINED_GLASS_PANE: 0-8,45-53  # Nur obere und untere Reihe
  BLACK_STAINED_GLASS_PANE: 9,17,18,26,27,35,36,44  # Nur Rand-Slots
```

### Navigation-Items

```yaml
items:
  prevPage:
    material: PLAYER_HEAD
    skullowner: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjdhYWNhZDE5M2UyMjI2OTcxZWQ5NTMwMmRiYTQzMzQzOGJlNDY0NGZiYWI1ZWJmODE4MDU0MDYxNjY3ZmJlMiJ9fX0=
    name: '&7«'
    slot: 52
  nextPage:
    material: PLAYER_HEAD
    skullowner: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTliZjMyOTJlMTI2YTEwNWI1NGViYTcxM2FhMWIxNTJkNTQxYTFkODkzODgyOWM1NjM2NGQxNzhlZDIyYmYifX19
    name: '&7»'
    slot: 53
```

### Status-Indicator Items

Diese Items erscheinen neben dem Perk-Item (im `infoslot`):

```yaml
items:
  enabled:
    material: LIME_DYE
    name: '&aAktiviert'
  disabled:
    material: GRAY_DYE
    name: '&7Deaktiviert'
  blocked:
    material: RED_DYE
    name: '&cNicht freigeschalten'
    lore:
      - '&cFür diesen Perk hast du aktuell keine Rechte'
```

***

## Perks erstellen

### Grundlegende Struktur

{% hint style="success" %}
**Schnellstart:** Kopiere die Vorlage unten und passe sie an deine Bedürfnisse an!
{% endhint %}

```yaml
perks:
  '1':  # Seite 1
    PERK_NAME:
      enable: true                          # Aktiviert/Deaktiviert den Perk
      perkType: PERK_TYPE                   # Der Perk-Typ (siehe PerkTypes.md)
      permission: perks.perk_name           # Erforderliche Permission (leer = keine)
      material: MATERIAL_NAME               # Item-Material
      shortid: 0                            # (Optional) Data-Value für Minecraft < 1.13
      amount: 1                             # Item-Anzahl (Stapelgröße)
      name: '&6Name des Perks'             # Anzeigename
      lore:                                 # Beschreibung (mehrere Zeilen möglich)
        - '&8&m----------'
        - '&7Beschreibung des Perks'
      slot: 10                              # Slot des Perk-Items
      infoslot: 11                          # Slot des Status-Indicators
      blockedworld:                         # Welten, in denen der Perk nicht funktioniert
        - world_nether
        - world_the_end
```

<table><thead><tr><th width="180">Parameter</th><th width="120">Erforderlich</th><th>Beschreibung</th></tr></thead><tbody><tr><td><code>enable</code></td><td>✅ Ja</td><td>Aktiviert/Deaktiviert den Perk</td></tr><tr><td><code>perkType</code></td><td>✅ Ja</td><td>Der Typ des Perks (siehe <a href="/pages/a4114191b4b2fc528a5251436005af31da39862e">PerkTypes.md</a>)</td></tr><tr><td><code>permission</code></td><td>❌ Nein</td><td>Erforderliche Permission (leer = für alle)</td></tr><tr><td><code>material</code></td><td>✅ Ja</td><td>Das Item-Material aus Minecraft</td></tr><tr><td><code>shortid</code></td><td>❌ Nein</td><td>Data-Value für Minecraft &#x3C; 1.13</td></tr><tr><td><code>amount</code></td><td>❌ Nein</td><td>Stackgröße des Items (Standard: 1)</td></tr><tr><td><code>name</code></td><td>✅ Ja</td><td>Anzeigename des Perks</td></tr><tr><td><code>lore</code></td><td>❌ Nein</td><td>Beschreibungstext (mehrere Zeilen)</td></tr><tr><td><code>slot</code></td><td>✅ Ja</td><td>Slot-Position des Perk-Items (0-53)</td></tr><tr><td><code>infoslot</code></td><td>✅ Ja</td><td>Slot für Status-Indicator</td></tr><tr><td><code>blockedworld</code></td><td>❌ Nein</td><td>Liste von Welten wo Perk nicht funktioniert</td></tr></tbody></table>

### Beispiele

{% tabs %}
{% tab title="No Fall Damage" %}
**Einfacher Schutz-Perk**

```yaml
perks:
  '1':
    NO_FALL_DAMAGE:
      enable: true
      perkType: NO_FALL_DAMAGE
      permission: perks.no_fall_damage
      material: NETHERITE_BOOTS
      amount: 1
      name: '&6Kein Fallschaden'
      lore:
        - '&8&m----------'
        - '&7Du erhältst keinen Fallschaden mehr.'
      slot: 10
      infoslot: 11
      blockedworld:
        - world_nether
```

{% endtab %}

{% tab title="Potion Effect" %}
**Dauerhafter Trank-Effekt (Speed II)**

```yaml
perks:
  '1':
    POTION_EFFECT_SPEED_-1_1:
      enable: true
      perkType: POTION_EFFECT;SPEED;-1;1  # Format: EFFECT;NAME;DAUER;STÄRKE
      permission: perks.potion_effect_speed_-1_1
      material: SUGAR
      amount: 1
      name: '&bSchnelligkeit+'
      lore:
        - '&8&m----------'
        - '&7+20% Geschwindigkeit.'
      slot: 23
      infoslot: 24
      blockedworld: []
```

{% hint style="info" %}
**Format:** `POTION_EFFECT;EFFECT_NAME;DURATION;AMPLIFIER`

* DURATION: `-1` = unendlich
* AMPLIFIER: `0` = Level I, `1` = Level II, etc.
  {% endhint %}
  {% endtab %}

{% tab title="Mob-Schutz" %}
**Schutz vor Creepern**

```yaml
perks:
  '1':
    NO_CREEPER_DAMAGE:
      enable: true
      perkType: NO_CREEPER_DAMAGE
      permission: perks.no_creeper_damage
      material: CREEPER_SPAWN_EGG
      amount: 1
      name: '&6Kein Creeper-Schaden'
      lore:
        - '&8&m----------'
        - 'Creeper fügen dir keinen Schaden zu.'
      slot: 19
      infoslot: 20
      blockedworld: []
```

{% hint style="success" %}
Funktioniert für **alle** Minecraft Entity-Typen!

Format: `NO_<ENTITY_TYPE>_DAMAGE`
{% endhint %}
{% endtab %}

{% tab title="Mit HEX-Farben" %}
**Moderner Perk mit Gradient (1.16+)**

```yaml
perks:
  '2':
    CUSTOM_PERK:
      enable: true
      perkType: NO_HUNGER
      permission: perks.custom_perk
      material: GOLDEN_APPLE
      amount: 1
      name: '&#FFD700E&#FFA500p&#FF8C00i&#FF6347c &#FF1493P&#9400D3erk'
      lore:
        - '&8&m━━━━━━━━━━━━━━'
        - '&#FFD700Eine eigene Beschreibung'
        - '&#FFD700mit mehreren Zeilen'
        - ''
        - '&e▶ Status: %perks_status_CUSTOM_PERK%'
      slot: 10
      infoslot: 11
      blockedworld:
        - world_pvp
```

{% endtab %}
{% endtabs %}

### Potion-Effekte im Detail

{% hint style="info" %}
**Format:** `POTION_EFFECT;<EFFECT_NAME>;<DURATION>;<AMPLIFIER>`

* DURATION: `-1` für unendlich, sonst Sekunden
* AMPLIFIER: `0` = Level I, `1` = Level II, `2` = Level III, etc.
  {% endhint %}

<details>

<summary>📜 Alle verfügbaren Potion-Effekte</summary>

**Positive Effekte:**

* `SPEED` - Geschwindigkeit
* `JUMP` - Sprungkraft
* `INCREASE_DAMAGE` - Stärke
* `REGENERATION` - Regeneration
* `DAMAGE_RESISTANCE` - Resistenz
* `FIRE_RESISTANCE` - Feuerresistenz
* `WATER_BREATHING` - Unterwasseratmung
* `INVISIBILITY` - Unsichtbarkeit
* `NIGHT_VISION` - Nachtsicht
* `FAST_DIGGING` - Eile
* `HEALTH_BOOST` - Bonusleben
* `ABSORPTION` - Absorption
* `SATURATION` - Sättigung
* `GLOWING` - Leuchten
* `LUCK` - Glück
* `SLOW_FALLING` - Sanfter Fall
* `CONDUIT_POWER` - Kraft der Meere
* `DOLPHINS_GRACE` - Delfin-Gnade

**Negative Effekte** (für spezielle Zwecke):

* `SLOW` - Langsamkeit
* `SLOW_DIGGING` - Abbaulähmung
* `HARM` - Sofortschaden
* `CONFUSION` - Übelkeit
* `BLINDNESS` - Blindheit
* `HUNGER` - Hunger
* `WEAKNESS` - Schwäche
* `POISON` - Vergiftung
* `WITHER` - Wither

</details>

<details>

<summary>✨ Beispiel-Kombinationen</summary>

```yaml
# Regeneration IV (unendlich)
perkType: POTION_EFFECT;REGENERATION;-1;3

# Jump Boost III (unendlich)
perkType: POTION_EFFECT;JUMP;-1;2

# Stärke II (unendlich)
perkType: POTION_EFFECT;INCREASE_DAMAGE;-1;1

# Feuerresistenz I (unendlich)
perkType: POTION_EFFECT;FIRE_RESISTANCE;-1;0

# Speed V (extreme Geschwindigkeit)
perkType: POTION_EFFECT;SPEED;-1;4

# Night Vision (perfekt für Höhlen)
perkType: POTION_EFFECT;NIGHT_VISION;-1;0
```

</details>

### Mob-Schutz erstellen

```yaml
perks:
  '1':
    NO_CREEPER_DAMAGE:
      enable: true
      perkType: NO_CREEPER_DAMAGE       # Format: NO_<MOBNAME>_DAMAGE
      permission: perks.no_creeper_damage
      material: CREEPER_SPAWN_EGG
      amount: 1
      name: '&6Kein Creeper-Schaden'
      lore:
        - '&8&m----------'
        - 'Creeper fügen dir keinen Schaden zu.'
      slot: 19
      infoslot: 20
      blockedworld: []
```

**Verfügbare Mob-Schutz Perks:**

* `NO_CREEPER_DAMAGE` - Creeper
* `NO_ZOMBIE_DAMAGE` - Zombies
* `NO_SKELETON_DAMAGE` - Skelette
* `NO_SPIDER_DAMAGE` - Spinnen
* `NO_ENDERMAN_DAMAGE` - Enderman
* `NO_BLAZE_DAMAGE` - Lohen
* `NO_GHAST_DAMAGE` - Ghasts
* `NO_SLIME_DAMAGE` - Schleime
* `NO_GUARDIAN_DAMAGE` - Wächter
* `NO_ZOMBIFIED_PIGLIN_DAMAGE` - Zombie-Piglins
* Und viele weitere (alle Minecraft-Entitäten)

***

### Legacy-Support (Minecraft < 1.13)

{% hint style="warning" %}
**Nur für Minecraft 1.8 - 1.12:** Verwende die `shortid`-Option für Data-Values!
{% endhint %}

Für Minecraft-Versionen **unter 1.13** kannst du die `shortid`-Option verwenden, um Data-Values für Items zu setzen.

{% tabs %}
{% tab title="Was ist shortid?" %}
**Data-Values in Legacy-Versionen:**

* In Minecraft < 1.13 hatten Items numerische Data-Values
* Beispiel: `WOOL` + `shortid: 3` = Hellblaue Wolle
* Ab 1.13+ wurden diese durch separate Material-Namen ersetzt (`LIGHT_BLUE_WOOL`)

Die `shortid`-Option wird in Minecraft 1.13+ automatisch ignoriert.
{% endtab %}

{% tab title="Beispiel" %}

```yaml
perks:
  '1':
    LEGACY_WOOL_PERK:
      enable: true
      perkType: NO_FALL_DAMAGE
      permission: perks.legacy_wool
      material: WOOL
      shortid: 3          # 3 = Hellblaue Wolle in 1.8-1.12
      amount: 1
      name: '&bWoll-Perk'
      lore:
        - '&7Funktioniert mit Legacy-Items'
      slot: 10
      infoslot: 11
      blockedworld: []
```

{% endtab %}

{% tab title="Häufige shortids" %}

<table><thead><tr><th width="200">Material</th><th width="100">shortid</th><th>Ergebnis</th></tr></thead><tbody><tr><td><code>WOOL</code></td><td>0-15</td><td>Verschiedene Wollfarben</td></tr><tr><td><code>STAINED_GLASS</code></td><td>0-15</td><td>Verschiedene Glasfarben</td></tr><tr><td><code>STAINED_GLASS_PANE</code></td><td>0-15</td><td>Verschiedene Scheiben</td></tr><tr><td><code>WOOD</code></td><td>0-5</td><td>Verschiedene Holzarten</td></tr><tr><td><code>LOG</code></td><td>0-3</td><td>Verschiedene Baumstämme</td></tr><tr><td><code>INK_SACK</code></td><td>0-15</td><td>Verschiedene Farbstoffe</td></tr><tr><td><code>MONSTER_EGG</code></td><td>Variiert</td><td>Verschiedene Spawn-Eggs</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

***

### Slots und Layout

**Inventar-Größe 6 Zeilen (54 Slots):**

```
 0  1  2  3  4  5  6  7  8
 9 10 11 12 13 14 15 16 17
18 19 20 21 22 23 24 25 26
27 28 29 30 31 32 33 34 35
36 37 38 39 40 41 42 43 44
45 46 47 48 49 50 51 52 53
```

**Empfohlenes Layout mit Info-Slots:**

* Perk-Item: `slot: 10`
* Status-Indicator: `infoslot: 11`

So sind Perk und Status nebeneinander sichtbar.

***

## Erweiterte Einstellungen

### Mehrere Seiten erstellen

Du kannst beliebig viele Seiten hinzufügen:

```yaml
perks:
  '1':
    # 8 Perks auf Seite 1
  '2':
    # 8 Perks auf Seite 2
  '3':
    # 8 Perks auf Seite 3
  # usw...
```

Die Navigation zwischen Seiten erfolgt automatisch über die `prevPage` und `nextPage` Items.

### Weltbasierte Einschränkungen

Perks können pro Welt deaktiviert werden:

```yaml
blockedworld:
  - world          # Hauptwelt
  - world_nether   # Nether
  - world_the_end  # End
  - my_custom_world # Eigene Welt
```

**Wildcard-Unterstützung:**

```yaml
blockedworld:
  - world_pvp_*    # Alle Welten die mit "world_pvp_" beginnen
```

### Permissions ohne Permission

Lass das `permission`-Feld leer, um einen Perk für alle verfügbar zu machen:

```yaml
perks:
  '1':
    FREE_PERK:
      enable: true
      perkType: NO_FALL_DAMAGE
      permission: ''  # Leer = Kein Permission erforderlich
      # ... rest der Config
```

### Custom Head Textures

Für Player-Heads kannst du Custom Textures verwenden:

```yaml
material: PLAYER_HEAD
skullowner: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjdhYWNhZDE5M2UyMjI2OTcxZWQ5NTMwMmRiYTQzMzQzOGJlNDY0NGZiYWI1ZWJmODE4MDU0MDYxNjY3ZmJlMiJ9fX0=
```

Die Textures kannst du von Seiten wie [Minecraft-Heads.com](https://minecraft-heads.com/) bekommen.

***

## Placeholder-Konfiguration

### Replacement Placeholders

Diese Placeholders werden in der GUI und in Nachrichten ersetzt:

```yaml
replacementplaceholders:
  timer_GARDENER:
    current: '%min%:%sec%'  # Anzeige während Cooldown läuft
    empty: ''               # Anzeige wenn kein Cooldown
  timer_FLY:
    current: '%min%:%sec%'
    empty: ''
  status:
    enabled: '&aAktiviert'
    disabled: '&7Deaktiviert'
    blocked: '&cNicht freigeschalten'
```

**Verwendung in Lore:**

```yaml
lore:
  - '&7Status: %perks_status_NO_FALL_DAMAGE%'
  - '&7Cooldown: %perks_timer_GARDENER%'
```

Siehe auch: [Placeholder.md](broken://pages/208c15217ca72deb31bea892d3e60e92e67b7285) für vollständige PlaceholderAPI-Integration.

***

## Beispiel: Kompletter Custom Perk

Hier ist ein vollständiges Beispiel für einen eigenen Perk:

```yaml
perks:
  '1':
    CUSTOM_SUPER_SPEED:
      enable: true
      perkType: POTION_EFFECT;SPEED;-1;4  # Speed V (unendlich)
      permission: perks.vip.superspeed
      material: FEATHER
      amount: 1
      name: '&#00FFFFSuper Speed'
      lore:
        - '&8&m━━━━━━━━━━━━━━'
        - '&7Erhalte permanente Geschwindigkeit V'
        - '&7und werde zum schnellsten Spieler!'
        - ''
        - '&e▶ Status: %perks_status_CUSTOM_SUPER_SPEED%'
        - '&c▶ Nur für VIP+'
      slot: 28
      infoslot: 29
      blockedworld:
        - world_pvp
        - event_world
```

***

## Reload

{% hint style="info" %}
**Nach Änderungen:** Verwende `/perks reload` um die Config ohne Server-Neustart neu zu laden!
{% endhint %}

```bash
/perks reload
```

{% tabs %}
{% tab title="✅ Wird neu geladen" %}

* Alle Perk-Definitionen
* GUI-Layout und Items
* Nachrichten und Texte
* Placeholder-Formate
* Cooldown-Zeiten
* Instant-Smelt Einstellungen
  {% endtab %}

{% tab title="❌ Erfordert Neustart" %}

* MySQL-Verbindung
* Plugin-Hauptkonfiguration
* PlaceholderAPI-Integration

{% hint style="warning" %}
Aktive Perks der Spieler bleiben nach Reload aktiv!
{% endhint %}
{% endtab %}
{% endtabs %}

***

## Troubleshooting

<details>

<summary>🚫 Perk erscheint nicht im GUI</summary>

**Mögliche Ursachen:**

1. `enable: false` gesetzt → Setze auf `true`
2. Syntax-Fehler in der YAML-Datei → Prüfe Einrückungen!
3. Server nicht neu geladen → Verwende `/perks reload`
4. Slot bereits belegt → Prüfe `slot` und `placeholder` Items

**Lösung:**

```yaml
perks:
  '1':
    MEIN_PERK:
      enable: true  # ← Muss true sein!
      # ... rest der Config
```

</details>

<details>

<summary>⚠️ Perk funktioniert nicht</summary>

**Mögliche Ursachen:**

1. **Keine Permission:** Spieler hat nicht `perks.<perkname>`
2. **Welt gesperrt:** Welt ist in `blockedworld` Liste
3. **Falscher PerkType:** Überprüfe `perkType` Schreibweise
4. **Nicht aktiviert:** Spieler hat Perk im GUI nicht aktiviert

**Checkliste:**

* [ ] Permission vergeben?
* [ ] Welt erlaubt?
* [ ] PerkType korrekt?
* [ ] Perk im GUI aktiviert?

</details>

<details>

<summary>🎨 Status-Indicator wird nicht angezeigt</summary>

**Lösung:**

```yaml
MY_PERK:
  slot: 10       # Perk-Item Slot
  infoslot: 11   # Status-Indicator Slot (≠ slot!)
```

{% hint style="danger" %}
**Wichtig:** `infoslot` darf nicht von Placeholder-Items überdeckt werden!

Überprüfe die `placeholder` Konfiguration.
{% endhint %}

</details>

<details>

<summary>📝 YAML-Syntax-Fehler</summary>

**Häufige Fehler:**

* ❌ Tabs statt Leerzeichen verwendet
* ❌ Inkonsistente Einrückung
* ❌ Fehlende Anführungszeichen bei Sonderzeichen
* ❌ Doppelte Keys im selben Abschnitt

**Best Practices:**

* ✅ Verwende **2 Leerzeichen** pro Einrückungsebene
* ✅ Keine Tabs, nur Leerzeichen
* ✅ Teste Config mit [YAML-Validator](https://www.yamllint.com/)
* ✅ Verwende einen Editor mit YAML-Syntax-Highlighting

**Beispiel:**

```yaml
perks:
  '1':                    # 0 Leerzeichen
    PERK_NAME:            # 2 Leerzeichen
      enable: true        # 4 Leerzeichen
      perkType: FLY       # 4 Leerzeichen
```

</details>

***

## Weiterführende Dokumentation

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>📋 PerkTypes</strong></td><td>Alle verfügbaren Perk-Typen mit detaillierten Erklärungen</td><td><a href="/pages/a4114191b4b2fc528a5251436005af31da39862e">/pages/a4114191b4b2fc528a5251436005af31da39862e</a></td></tr><tr><td><strong>🔖 Placeholder</strong></td><td>PlaceholderAPI Integration und Scoreboard-Beispiele</td><td><a href="/pages/208c15217ca72deb31bea892d3e60e92e67b7285">/pages/208c15217ca72deb31bea892d3e60e92e67b7285</a></td></tr><tr><td><strong>📖 Hauptdokumentation</strong></td><td>Zurück zur Übersicht</td><td><a href="/pages/6d98e9da67e7da6cd24c93190d65c16c53ce0835">/pages/6d98e9da67e7da6cd24c93190d65c16c53ce0835</a></td></tr></tbody></table>

* [Placeholder.md](broken://pages/208c15217ca72deb31bea892d3e60e92e67b7285) - PlaceholderAPI Integration


# PerkTypes

Diese Dokumentation listet alle verfügbaren Perk-Typen auf, die du in der `config.yml` verwenden kannst.

{% hint style="info" %}
**Kompatibilität:** Alle Perk-Typen funktionieren mit Minecraft **1.8.8 bis zur neuesten Version** (1.21+).
{% endhint %}

## Übersicht aller Standard-Perks

<table><thead><tr><th width="280">Perk-Typ</th><th>Kurzbeschreibung</th><th width="220">Permission (Beispiel)</th></tr></thead><tbody><tr><td><code>NO_FALL_DAMAGE</code></td><td>Kein Fallschaden</td><td><code>perks.no_fall_damage</code></td></tr><tr><td><code>NO_HUNGER</code></td><td>Hunger sinkt nicht mehr</td><td><code>perks.no_hunger</code></td></tr><tr><td><code>FLY</code></td><td>Flug-Modus im Survival</td><td><code>perks.fly</code></td></tr><tr><td><code>KEEP_INV</code></td><td>Inventar beim Tod behalten</td><td><code>perks.keep_inv</code></td></tr><tr><td><code>KEEP_HOTBAR</code></td><td>Hotbar beim Tod behalten</td><td><code>perks.keep_hotbar</code></td></tr><tr><td><code>KEEP_XP</code></td><td>XP beim Tod behalten</td><td><code>perks.keep_xp</code></td></tr><tr><td><code>DOUBLE_XP</code></td><td>Doppelte Erfahrungspunkte (2x)</td><td><code>perks.double_xp</code></td></tr><tr><td><code>QUAD_XP</code></td><td>Vierfache Erfahrungspunkte (4x)</td><td><code>perks.quad_xp</code></td></tr><tr><td><code>DROP_TO_INV</code></td><td>Drops direkt ins Inventar</td><td><code>perks.drop_to_inv</code></td></tr><tr><td><code>NO_EXPLOSION</code></td><td>Kein Explosionsschaden</td><td><code>perks.no_explosion</code></td></tr><tr><td><code>NO_LAVA</code></td><td>Kein Lavaschaden</td><td><code>perks.no_lava</code></td></tr><tr><td><code>EXTRA_HEARTS_5</code></td><td>+5 zusätzliche Herzen (+10 HP)</td><td><code>perks.extra_hearts_5</code></td></tr><tr><td><code>EXTRA_HEARTS_10</code></td><td>+10 zusätzliche Herzen (+20 HP)</td><td><code>perks.extra_hearts_10</code></td></tr><tr><td><code>GARDENER_1</code></td><td>Pflanzen wachsen beim Sneaken (1x1)</td><td><code>perks.gardener_1</code></td></tr><tr><td><code>GARDENER_2</code></td><td>Pflanzen wachsen beim Sneaken (3x3)</td><td><code>perks.gardener_2</code></td></tr><tr><td><code>POTION_EFFECT</code></td><td>Dauerhafter Trank-Effekt (konfigurierbar)</td><td><code>perks.potion_effect_*</code></td></tr><tr><td><code>NO_MOB_DAMAGE</code></td><td>Schutz vor spezifischen Mobs (dynamisch)</td><td><code>perks.no_&#x3C;mob>_damage</code></td></tr></tbody></table>

{% hint style="success" %}
**Dynamische Perks:** Mob-Schutz und Potion-Effekte können für **jeden** Mob-Typ bzw. Effekt individuell erstellt werden!
{% endhint %}

***

## Gameplay-Perks

### NO\_FALL\_DAMAGE

Spieler erleiden **keinen Fallschaden** mehr.

```yaml
MY_NO_FALL_PERK:
  enable: true
  perkType: NO_FALL_DAMAGE
  permission: perks.no_fall_damage
  material: NETHERITE_BOOTS
  name: '&6Kein Fallschaden'
  lore:
    - '&7Du erhältst keinen Fallschaden mehr.'
  slot: 10
  infoslot: 11
  blockedworld: []
```

**Events:** `EntityDamageEvent` mit Cause `FALL`

***

### NO\_HUNGER

Die **Hunger-Anzeige** des Spielers sinkt nicht mehr.

```yaml
MY_NO_HUNGER_PERK:
  enable: true
  perkType: NO_HUNGER
  permission: perks.no_hunger
  material: COOKED_BEEF
  name: '&6Kein Hunger'
  lore:
    - '&7Deine Hunger-Anzeige sinkt nicht mehr.'
  slot: 19
  infoslot: 20
  blockedworld: []
```

**Funktionsweise:** Hunger-Wert wird konstant auf Maximum gehalten

***

### FLY

Ermöglicht dem Spieler das **Fliegen im Survival-Modus**.

```yaml
MY_FLY_PERK:
  enable: true
  perkType: FLY
  permission: perks.fly
  material: FEATHER
  name: '&6Fly'
  lore:
    - '&7Flug-Modus im Survival'
  slot: 28
  infoslot: 29
  blockedworld:
    - world_nether
```

**Features:**

* Automatische Aktivierung
* PlotSquared-Integration (nur auf eigenem Plot)
* Konfigurierbare Warnzeit vor Deaktivierung
* Timer-Placeholder verfügbar

**Konfiguration:**

```yaml
fly:
  sec: 5  # Warnzeit in Sekunden
  message: '&cDu kannst nur noch &e%sec% Sekunden &cfliegen'
  blockedworld:
    - world_nether
```

**Placeholder:**

* `%perks_timer_FLY%` - Verbleibende Zeit

***

## Inventar-Perks

### KEEP\_INV

Das **gesamte Inventar** bleibt beim Tod erhalten.

```yaml
MY_KEEP_INV_PERK:
  enable: true
  perkType: KEEP_INV
  permission: perks.keep_inv
  material: ENDER_CHEST
  name: '&6KeepInventory'
  lore:
    - '&7Inventar ist beim Tod sicher.'
  slot: 14
  infoslot: 15
  blockedworld: []
```

**Events:** `PlayerDeathEvent`

***

### KEEP\_HOTBAR

Nur die **Hotbar** (Slots 0-8) bleibt beim Tod erhalten.

```yaml
MY_KEEP_HOTBAR_PERK:
  enable: true
  perkType: KEEP_HOTBAR
  permission: perks.keep_hotbar
  material: CHEST
  name: '&6KeepHotbar'
  lore:
    - '&7Hotbar ist beim Tod sicher.'
  slot: 37
  infoslot: 38
  blockedworld: []
```

**Events:** `PlayerDeathEvent`, `PlayerRespawnEvent`

***

### DROP\_TO\_INV

Abgebaute Blöcke landen **direkt im Inventar** statt zu droppen.

```yaml
MY_DROP_TO_INV_PERK:
  enable: true
  perkType: DROP_TO_INV
  permission: perks.drop_to_inv
  material: HOPPER
  name: '&6DropToInv'
  lore:
    - '&7Abgebaute Blöcke landen'
    - '&7direkt in deinem Inventar.'
  slot: 32
  infoslot: 33
  blockedworld: []
```

**Events:** `BlockBreakEvent`

**Features:**

{% code title="" expandable="true" %}

```
// Some code
```

{% endcode %}

* Drops werden automatisch zum Inventar hinzugefügt
* Funktioniert nicht, wenn Inventar voll ist

#### Blacklist für DROP\_TO\_INV

Bestimmte Items können blockiert werden, welche nicht bei DROP\_TO\_INV getriggert werden sollen, adde dafür in die config.yml beispielsweise:

{% code title="Blockiert SHULKER\_BOX & COBBLESTONE" expandable="true" %}

```
droptoinvBlacklist:
- "SHULKER_BOX"
- "COBBLESTONE"
```

{% endcode %}

***

## XP-Perks

### KEEP\_XP

**Erfahrungspunkte** bleiben beim Tod erhalten.

```yaml
MY_KEEP_XP_PERK:
  enable: true
  perkType: KEEP_XP
  permission: perks.keep_xp
  material: EXPERIENCE_BOTTLE
  name: '&6KeepXP'
  lore:
    - '&7XP sind beim Tod sicher.'
  slot: 23
  infoslot: 24
  blockedworld: []
```

**Events:** `PlayerDeathEvent`

***

### DOUBLE\_XP

Spieler erhalten **doppelte Erfahrungspunkte**.

```yaml
MY_DOUBLE_XP_PERK:
  enable: true
  perkType: DOUBLE_XP
  permission: perks.double_xp
  material: EXPERIENCE_BOTTLE
  amount: 2
  name: '&aDoppelte XP'
  lore:
    - '&7Doppelte Menge an XP.'
  slot: 19
  infoslot: 20
  blockedworld: []
```

**Events:** `PlayerExpChangeEvent`

**Multiplikator:** 2x

***

### QUAD\_XP

Spieler erhalten **vierfache Erfahrungspunkte**.

```yaml
MY_QUAD_XP_PERK:
  enable: true
  perkType: QUAD_XP
  permission: perks.quad_xp
  material: EXPERIENCE_BOTTLE
  amount: 4
  name: '&aVierfach XP'
  lore:
    - '&7Vierfache Menge an XP.'
  slot: 28
  infoslot: 29
  blockedworld: []
```

**Events:** `PlayerExpChangeEvent`

**Multiplikator:** 4x

**Hinweis:** QUAD\_XP und DOUBLE\_XP können nicht gleichzeitig aktiv sein. QUAD\_XP hat Vorrang.

***

## Schutz-Perks

### NO\_EXPLOSION

Spieler erleiden **keinen Explosionsschaden** (Creeper, TNT, etc.).

```yaml
MY_NO_EXPLOSION_PERK:
  enable: true
  perkType: NO_EXPLOSION
  permission: perks.no_explosion
  material: TNT
  name: '&6Kein Explosionsschaden'
  lore:
    - '&7Du erleidest keinen Explosionsschaden.'
  slot: 10
  infoslot: 11
  blockedworld: []
```

**Events:** `EntityDamageEvent` mit Cause `BLOCK_EXPLOSION` oder `ENTITY_EXPLOSION`

***

### NO\_LAVA

Spieler erleiden **keinen Lavaschaden**.

```yaml
MY_NO_LAVA_PERK:
  enable: true
  perkType: NO_LAVA
  permission: perks.no_lava
  material: LAVA_BUCKET
  name: '&6Kein Lavaschaden'
  lore:
    - '&7Du erleidest keinen Schaden durch Lava.'
  slot: 19
  infoslot: 20
  blockedworld: []
```

**Events:** `EntityDamageEvent` mit Cause `LAVA`

***

### EXTRA\_HEARTS\_5

Spieler erhalten **5 zusätzliche Herzen** (+10 HP).

```yaml
MY_EXTRA_HEARTS_5_PERK:
  enable: true
  perkType: EXTRA_HEARTS_5
  permission: perks.extra_hearts_5
  material: REDSTONE
  amount: 5
  name: '&c5 Extra-Herzen'
  lore:
    - '&7Du erhältst 5 zusätzliche Herzen.'
  slot: 41
  infoslot: 42
  blockedworld: []
```

**Funktionsweise:**

* Basis-Leben: 20 HP (10 Herzen)
* Mit Perk: 30 HP (15 Herzen)
* Bei Deaktivierung: Zurück auf 20 HP

***

### EXTRA\_HEARTS\_10

Spieler erhalten **10 zusätzliche Herzen** (+20 HP).

```yaml
MY_EXTRA_HEARTS_10_PERK:
  enable: true
  perkType: EXTRA_HEARTS_10
  permission: perks.extra_hearts_10
  material: NETHER_STAR
  amount: 10
  name: '&c10 Extra-Herzen'
  lore:
    - '&7Du erhältst 10 zusätzliche Herzen.'
  slot: 10
  infoslot: 11
  blockedworld: []
```

**Funktionsweise:**

* Basis-Leben: 20 HP (10 Herzen)
* Mit Perk: 40 HP (20 Herzen)

**Hinweis:** EXTRA\_HEARTS\_10 und EXTRA\_HEARTS\_5 können nicht gleichzeitig aktiv sein.

***

## Mob-Schutz-Perks

Mob-Schutz-Perks schützen vor Schaden durch **spezifische Mob-Typen**.

### Format

```
NO_<MOBNAME>_DAMAGE
```

### Verfügbare Mob-Schutz-Perks

| Perk-Typ                     | Beschreibung          | Entity-Type       |
| ---------------------------- | --------------------- | ----------------- |
| `NO_CREEPER_DAMAGE`          | Kein Creeper-Schaden  | CREEPER           |
| `NO_ZOMBIE_DAMAGE`           | Kein Zombie-Schaden   | ZOMBIE            |
| `NO_SKELETON_DAMAGE`         | Kein Skelett-Schaden  | SKELETON          |
| `NO_SPIDER_DAMAGE`           | Kein Spinnen-Schaden  | SPIDER            |
| `NO_ENDERMAN_DAMAGE`         | Kein Enderman-Schaden | ENDERMAN          |
| `NO_BLAZE_DAMAGE`            | Kein Lohen-Schaden    | BLAZE             |
| `NO_GHAST_DAMAGE`            | Kein Ghast-Schaden    | GHAST             |
| `NO_SLIME_DAMAGE`            | Kein Schleim-Schaden  | SLIME             |
| `NO_GUARDIAN_DAMAGE`         | Kein Wächter-Schaden  | GUARDIAN          |
| `NO_ZOMBIFIED_PIGLIN_DAMAGE` | Kein Pigman-Schaden   | ZOMBIFIED\_PIGLIN |

### Beispiel: Creeper-Schutz

```yaml
NO_CREEPER_DAMAGE:
  enable: true
  perkType: NO_CREEPER_DAMAGE
  permission: perks.no_creeper_damage
  material: CREEPER_SPAWN_EGG
  name: '&6Kein Creeper-Schaden'
  lore:
    - '&8&m----------'
    - 'Creeper fügen dir keinen Schaden zu.'
  slot: 19
  infoslot: 20
  blockedworld: []
```

### Funktionsweise

Das Plugin erkennt automatisch alle Mob-Typen mit dem Format `NO_<MOBNAME>_DAMAGE`.

**Events:** `EntityDamageByEntityEvent`

### Alle Minecraft Entity-Typen

Du kannst für **jeden Entity-Type** einen Schutz-Perk erstellen:

```
NO_WITHER_DAMAGE
NO_ENDER_DRAGON_DAMAGE
NO_PHANTOM_DAMAGE
NO_DROWNED_DAMAGE
NO_HUSK_DAMAGE
NO_STRAY_DAMAGE
NO_WITCH_DAMAGE
NO_PILLAGER_DAMAGE
NO_RAVAGER_DAMAGE
NO_VEX_DAMAGE
NO_VINDICATOR_DAMAGE
NO_EVOKER_DAMAGE
NO_PIGLIN_DAMAGE
NO_HOGLIN_DAMAGE
NO_ZOGLIN_DAMAGE
NO_WARDEN_DAMAGE
```

***

## Potion-Effect-Perks

Potion-Effect-Perks geben Spielern **dauerhafte Trank-Effekte**.

### Format

```
perkType: POTION_EFFECT;<EFFECT>;<DURATION>;<AMPLIFIER>
```

**Parameter:**

* `<EFFECT>` - Name des Potion-Effekts (siehe Liste unten)
* `<DURATION>` - Dauer in Sekunden (`-1` für unendlich)
* `<AMPLIFIER>` - Stärke des Effekts (`0` = Level I, `1` = Level II, etc.)

### Verfügbare Potion-Effekte

| Effect-Name           | Beschreibung      | Minecraft-Name      |
| --------------------- | ----------------- | ------------------- |
| `SPEED`               | Geschwindigkeit   | Speed               |
| `SLOW`                | Langsamkeit       | Slowness            |
| `FAST_DIGGING`        | Eile              | Haste               |
| `SLOW_DIGGING`        | Abbaulähmung      | Mining Fatigue      |
| `INCREASE_DAMAGE`     | Stärke            | Strength            |
| `HEAL`                | Sofortige Heilung | Instant Health      |
| `HARM`                | Sofortschaden     | Instant Damage      |
| `JUMP`                | Sprungkraft       | Jump Boost          |
| `CONFUSION`           | Übelkeit          | Nausea              |
| `REGENERATION`        | Regeneration      | Regeneration        |
| `DAMAGE_RESISTANCE`   | Resistenz         | Resistance          |
| `FIRE_RESISTANCE`     | Feuerresistenz    | Fire Resistance     |
| `WATER_BREATHING`     | Unterwasseratmung | Water Breathing     |
| `INVISIBILITY`        | Unsichtbarkeit    | Invisibility        |
| `BLINDNESS`           | Blindheit         | Blindness           |
| `NIGHT_VISION`        | Nachtsicht        | Night Vision        |
| `HUNGER`              | Hunger            | Hunger              |
| `WEAKNESS`            | Schwäche          | Weakness            |
| `POISON`              | Vergiftung        | Poison              |
| `WITHER`              | Wither            | Wither              |
| `HEALTH_BOOST`        | Bonusleben        | Health Boost        |
| `ABSORPTION`          | Absorption        | Absorption          |
| `SATURATION`          | Sättigung         | Saturation          |
| `GLOWING`             | Leuchten          | Glowing             |
| `LEVITATION`          | Schwebekraft      | Levitation          |
| `LUCK`                | Glück             | Luck                |
| `UNLUCK`              | Pech              | Bad Luck            |
| `SLOW_FALLING`        | Sanfter Fall      | Slow Falling        |
| `CONDUIT_POWER`       | Kraft der Meere   | Conduit Power       |
| `DOLPHINS_GRACE`      | Delfin-Gnade      | Dolphin's Grace     |
| `BAD_OMEN`            | Übles Omen        | Bad Omen            |
| `HERO_OF_THE_VILLAGE` | Held des Dorfes   | Hero of the Village |

### Beispiele

#### Speed II (Unendlich)

```yaml
POTION_EFFECT_SPEED_-1_1:
  enable: true
  perkType: POTION_EFFECT;SPEED;-1;1
  permission: perks.potion_effect_speed_-1_1
  material: SUGAR
  name: '&bSchnelligkeit+'
  lore:
    - '&7Dauerhafte Geschwindigkeit II'
  slot: 23
  infoslot: 24
  blockedworld: []
```

#### Regeneration IV (Unendlich)

```yaml
POTION_EFFECT_REGENERATION_-1_3:
  enable: true
  perkType: POTION_EFFECT;REGENERATION;-1;3
  permission: perks.potion_effect_regeneration_-1_3
  material: ENCHANTED_GOLDEN_APPLE
  name: '&dRegeneration+2'
  lore:
    - '&7Regeneration 4 Effekt.'
  slot: 14
  infoslot: 15
  blockedworld: []
```

#### Strength I (Unendlich)

```yaml
POTION_EFFECT_INCREASE_DAMAGE_-1_0:
  enable: true
  perkType: POTION_EFFECT;INCREASE_DAMAGE;-1;0
  permission: perks.potion_effect_increase_damage_-1_0
  material: IRON_SWORD
  name: '&cStärke+'
  lore:
    - '&7Erhöhter Angriffsschaden.'
  slot: 37
  infoslot: 38
  blockedworld: []
```

#### Jump Boost V (Unendlich)

```yaml
POTION_EFFECT_JUMP_-1_4:
  enable: true
  perkType: POTION_EFFECT;JUMP;-1;4
  permission: perks.potion_effect_jump_-1_4
  material: RABBIT_FOOT
  name: '&eSuper Jump'
  lore:
    - '&7Springe extrem hoch!'
  slot: 32
  infoslot: 33
  blockedworld: []
```

#### Night Vision (Unendlich)

```yaml
POTION_EFFECT_NIGHT_VISION_-1_0:
  enable: true
  perkType: POTION_EFFECT;NIGHT_VISION;-1;0
  permission: perks.potion_effect_night_vision_-1_0
  material: ENDER_EYE
  name: '&fNachtsicht+'
  lore:
    - '&7Nachtsicht-Effekt.'
  slot: 41
  infoslot: 42
  blockedworld: []
```

### Levelsystem

**Amplifier-Werte:**

| Amplifier | Level   | Beispiel  |
| --------- | ------- | --------- |
| `0`       | I       | Speed I   |
| `1`       | II      | Speed II  |
| `2`       | III     | Speed III |
| `3`       | IV      | Speed IV  |
| `4`       | V       | Speed V   |
| `5`       | VI      | Speed VI  |
| ...       | ...     | ...       |
| `255`     | Maximum | Speed 256 |

### Config-Key Format

**Wichtig:** Der Config-Key (Name des Perks) muss Unterstriche `_` verwenden statt Semikolons `;`:

```yaml
# Config-Key mit Unterstrichen
POTION_EFFECT_SPEED_-1_1:
  # perkType mit Semikolons
  perkType: POTION_EFFECT;SPEED;-1;1
```

**Namenskonvention:**

```
POTION_EFFECT_<EFFEKT>_<DAUER>_<STÄRKE>
```

***

## Gärtner-Perks

Gärtner-Perks lassen Pflanzen schneller wachsen, wenn der Spieler sneakt.

### GARDENER\_1

Pflanzen im **1x1 Radius** wachsen beim Sneaken.

```yaml
GARDENER_1:
  enable: true
  perkType: GARDENER_1
  permission: perks.gardener_1
  material: WHEAT_SEEDS
  name: '&2Gärtner'
  lore:
    - '&7Pflanzen wachsen schneller (Sneaken).'
  slot: 37
  infoslot: 38
  blockedworld: []
```

**Radius:** 1x1 (nur der Block unter dem Spieler)

***

### GARDENER\_2

Pflanzen im **3x3 Radius** wachsen beim Sneaken.

```yaml
GARDENER_2:
  enable: true
  perkType: GARDENER_2
  permission: perks.gardener_2
  material: PUMPKIN_SEEDS
  name: '&2Gärtner+'
  lore:
    - '&73x3 Pflanzen wachsen schneller (Sneaken).'
  slot: 14
  infoslot: 15
  blockedworld: []
```

**Radius:** 3x3 (9 Blöcke um den Spieler herum)

### Funktionsweise

* Spieler sneakt auf/über einer Pflanze
* Plugin prüft Radius und lässt Pflanzen wachsen
* Cooldown verhindert Spam

**Unterstützte Pflanzen:**

* Weizen (Wheat)
* Karotten (Carrots)
* Kartoffeln (Potatoes)
* Rote Beete (Beetroot)
* Kürbisse (Pumpkin)
* Melonen (Melon)
* Kakteen (Cactus)
* Zuckerrohr (Sugar Cane)
* Netherwart
* Süßbeeren (Sweet Berries)

### Cooldown

```yaml
GARDENER_COOLDOWN_MS: 15000  # 15 Sekunden
```

**Placeholder:**

* `%perks_timer_GARDENER%` - Verbleibende Cooldown-Zeit

**Events:** `PlayerToggleSneakEvent`

***

## Sonstige Perks

### INSTANT\_SMELT

*Hinweis: Dieser Perk-Typ wird derzeit nicht als direkter perkType verwendet, sondern über eine separate Config-Sektion konfiguriert.*

Erze und andere Blöcke werden automatisch geschmolzen abgebaut.

**Konfiguration:**

```yaml
instantsmel:
  - SAND-GLASS
  - COBBLESTONE-STONE
  - IRON_ORE-IRON_INGOT
  - GOLD_ORE-GOLD_INGOT
  - ANCIENT_DEBRIS-NETHERITE_SCRAP
```

**Format:** `URSPRUNG-ERGEBNIS`

**Events:** `BlockBreakEvent`

***

### BREAK\_SPAWNER

*Hinweis: Dieser Perk-Typ ist im Code vorbereitet, aber nicht als PerkType-Enum definiert.*

Erlaubt das Aufheben von Spawnern.

**Implementierung:** Custom PerkType erforderlich

***

## Eigene PerkTypes erstellen

Das Plugin unterstützt **dynamische Mob-Schutz-Perks**. Andere Perk-Typen müssen im Code erweitert werden.

### Dynamische Mob-Schutz-Perks

Du kannst **jeden Entity-Type** als Mob-Schutz-Perk verwenden:

```yaml
NO_<ENTITY_TYPE>_DAMAGE:
  enable: true
  perkType: NO_<ENTITY_TYPE>_DAMAGE
  # ... rest der Config
```

**Beispiele für neue Mobs (1.19+):**

```yaml
NO_WARDEN_DAMAGE:
  enable: true
  perkType: NO_WARDEN_DAMAGE
  permission: perks.no_warden_damage
  material: SCULK_SENSOR
  name: '&6Kein Warden-Schaden'
  lore:
    - '&7Der Warden kann dir nichts anhaben.'
  slot: 10
  infoslot: 11
  blockedworld: []
```

### Code-Erweiterungen

Neue Perk-Typen müssen im Code hinzugefügt werden:

**1. PerkType.java:**

```java
public enum PerkType {
    // ... bestehende Typen
    MY_CUSTOM_PERK;
}
```

**2. PerkListener.java:**

```java
// Event-Listener für den Custom-Perk hinzufügen
@EventHandler
public void onMyCustomEvent(MyEvent e) {
    Player p = e.getPlayer();
    if (PerkPlayer.hasEnabled(p, "MY_CUSTOM_PERK") 
        && !isBlocked(p, "MY_CUSTOM_PERK")) {
        // Perk-Logik hier
    }
}
```

***

## Zusammenfassung aller PerkTypes

### Standard-Enum-Typen

```
NO_FALL_DAMAGE
NO_HUNGER
FLY
KEEP_INV
KEEP_HOTBAR
KEEP_XP
DOUBLE_XP
QUAD_XP
DROP_TO_INV
NO_EXPLOSION
NO_LAVA
EXTRA_HEARTS_5
EXTRA_HEARTS_10
GARDENER_1
GARDENER_2
POTION_EFFECT (mit Parametern)
NO_MOB_DAMAGE (dynamisch für alle Mobs)
```

### Dynamische Typen

```
NO_<ENTITY_TYPE>_DAMAGE (alle Minecraft Entity-Types)
```

### Spezielle Formate

```
POTION_EFFECT;<EFFECT>;<DURATION>;<AMPLIFIER>
```

***

## Best Practices

{% stepper %}
{% step %}

### 1. Namenskonvention

Verwende konsistente Namen für deine Perks:

```yaml
# Gut
NO_FALL_DAMAGE:
  perkType: NO_FALL_DAMAGE

# Vermeiden
myNoFallPerk:
  perkType: NO_FALL_DAMAGE
```

{% endstep %}

{% step %}

### 2. Permission-Struktur

```yaml
permission: perks.<kategorie>.<perk>

# Beispiele:
permission: perks.protection.no_fall_damage
permission: perks.effects.speed_2
permission: perks.vip.extra_hearts_10
```

{% endstep %}

{% step %}

### 3. Welteinschränkungen

Nutze `blockedworld` für PvP- oder Event-Welten:

```yaml
blockedworld:
  - world_pvp
  - world_event
  - arena
```

{% endstep %}

{% step %}

### 4. Page-Organisation

Organisiere Perks thematisch:

```yaml
perks:
  '1':  # Schutz-Perks
    NO_FALL_DAMAGE: ...
    NO_EXPLOSION: ...
  '2':  # Trank-Effekte
    POTION_EFFECT_SPEED_-1_1: ...
  '3':  # XP & Inventar
    DOUBLE_XP: ...
    KEEP_INV: ...
```

{% endstep %}
{% endstepper %}

***

**Weitere Informationen:**

* [Beschreibung.md](broken://pages/bdc328c1a6001c9c58cf99f192ea914b0988952f) - Plugin-Übersicht
* [Konfiguration.md](broken://pages/1469ece7c982f482365606634f6ea8ce984e36f6) - Detaillierte Config-Anleitung
* [Placeholder.md](broken://pages/22763eb38a692adadaa437640dd876b399322d50) - PlaceholderAPI Integration


# Placeholder

Das Perks Plugin unterstützt vollständig **PlaceholderAPI** und bietet eine Vielzahl von Platzhaltern, um Perk-Status und Timer in anderen Plugins wie Scoreboards, Tab-Listen, Holograms und mehr anzuzeigen.

***

## Installation

{% stepper %}
{% step %}

### 1. PlaceholderAPI installieren

1. Lade [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/) herunter
2. Platziere die `.jar` Datei im `plugins` Ordner
3. Starte den Server neu
   {% endstep %}

{% step %}

### 2. Perks Plugin installieren

Das Perks Plugin erkennt PlaceholderAPI automatisch und registriert alle Placeholders.

**Überprüfung:**

```
/papi info perks
```

**Output:**

```
Perks Expansion
Author: Dyroxplays
Version: 1.0
```

{% endstep %}
{% endstepper %}

***

## Verfügbare Placeholders

### Format

Alle Placeholders beginnen mit `%perks_` und enden mit `%`:

```
%perks_<typ>_<identifier>%
```

***

## Status-Placeholders

Status-Placeholders zeigen an, ob ein Perk aktiviert, deaktiviert oder gesperrt ist.

### Format

```
%perks_status_<PERK_NAME>%
```

### Beispiele

```
%perks_status_NO_FALL_DAMAGE%
%perks_status_FLY%
%perks_status_KEEP_INV%
%perks_status_DOUBLE_XP%
%perks_status_GARDENER_1%
```

### Ausgaben

Die Ausgabe ist in der `config.yml` konfigurierbar:

```yaml
replacementplaceholders:
  status:
    enabled: '&aAktiviert'      # Perk ist aktiv
    disabled: '&7Deaktiviert'   # Perk ist inaktiv
    blocked: '&cNicht freigeschalten'  # Keine Permission oder Welt gesperrt
```

**Beispiel-Ausgabe:**

* Perk aktiv: `&aAktiviert` → **✓ Aktiviert**
* Perk inaktiv: `&7Deaktiviert` → **✗ Deaktiviert**
* Perk gesperrt: `&cNicht freigeschalten` → **🔒 Nicht freigeschalten**

***

## Timer-Placeholders

Timer-Placeholders zeigen die verbleibende Zeit für Cooldowns an.

### Format

```
%perks_timer_<TIMER_NAME>%
```

### Verfügbare Timer

#### Gärtner-Cooldown

```
%perks_timer_GARDENER%
```

Zeigt die verbleibende Cooldown-Zeit des Gärtner-Perks an.

**Beispiel-Ausgabe:**

* Während Cooldown: `0:14` (14 Sekunden verbleibend)
* Kein Cooldown: \`\` (leer)

#### Fly-Timer

```
%perks_timer_FLY%
```

Zeigt die verbleibende Zeit des Fly-Modus an (z.B. bei Plot-based Fly).

**Beispiel-Ausgabe:**

* Während Fly aktiv: `2:30` (2 Minuten 30 Sekunden verbleibend)
* Kein Timer: \`\` (leer)

### Konfiguration

Die Anzeige der Timer ist konfigurierbar:

```yaml
replacementplaceholders:
  timer_GARDENER:
    current: '%min%:%sec%'  # Format während Cooldown läuft
    empty: ''               # Anzeige wenn kein Cooldown
  timer_FLY:
    current: '%min%:%sec%'  # Format während Timer läuft
    empty: ''               # Anzeige wenn kein Timer
```

**Custom Format-Beispiele:**

```yaml
# Mit Icons und Farben
timer_GARDENER:
  current: '⏱ &c%min%m %sec%s'
  empty: '&a✓ Bereit'

# Nur Sekunden
timer_FLY:
  current: '&e%sec%s'
  empty: '∞'

# Ausführlich
timer_GARDENER:
  current: '&7Cooldown: &c%min%:%sec%'
  empty: '&aKein Cooldown'
```

**Verfügbare Variablen:**

* `%min%` - Minuten (ohne führende Null)
* `%sec%` - Sekunden (mit führender Null, z.B. `05`)

***

## Konfigurierbare Ausgaben

Alle Placeholder-Ausgaben können vollständig angepasst werden:

### config.yml

```yaml
replacementplaceholders:
  timer_GARDENER:
    current: '%min%:%sec%'
    empty: ''
  timer_FLY:
    current: '%min%:%sec%'
    empty: ''
  status:
    enabled: '&aAktiviert'
    disabled: '&7Deaktiviert'
    blocked: '&cNicht freigeschalten'
```

### Custom Beispiele

#### Minimalistisch

```yaml
status:
  enabled: '&a✓'
  disabled: '&7✗'
  blocked: '&c🔒'
```

#### Mit Emojis

```yaml
status:
  enabled: '✅ &aAn'
  disabled: '⭕ &7Aus'
  blocked: '🔒 &cGesperrt'
```

#### Detailliert

```yaml
status:
  enabled: '&a[&l✓&a] Aktiviert'
  disabled: '&7[&l✗&7] Deaktiviert'
  blocked: '&c[&l!&c] Keine Berechtigung'
```

***

## Alle verfügbaren Perk-Placeholders

### Basis-Perks

```
%perks_status_NO_FALL_DAMAGE%
%perks_status_NO_HUNGER%
%perks_status_FLY%
%perks_status_KEEP_INV%
%perks_status_KEEP_HOTBAR%
%perks_status_KEEP_XP%
%perks_status_DOUBLE_XP%
%perks_status_QUAD_XP%
%perks_status_DROP_TO_INV%
%perks_status_EXTRA_HEARTS_5%
%perks_status_EXTRA_HEARTS_10%
%perks_status_GARDENER_1%
%perks_status_GARDENER_2%
```

### Potion-Effect Perks

Für Potion-Effekte verwendest du den Config-Key (mit Unterstrichen statt Semikolons):

**Config:**

```yaml
POTION_EFFECT_SPEED_-1_1:
  perkType: POTION_EFFECT;SPEED;-1;1
```

**Placeholder:**

```
%perks_status_POTION_EFFECT_SPEED_-1_1%
```

**Weitere Beispiele:**

```
%perks_status_POTION_EFFECT_REGENERATION_-1_1%
%perks_status_POTION_EFFECT_JUMP_-1_2%
%perks_status_POTION_EFFECT_INCREASE_DAMAGE_-1_1%
%perks_status_POTION_EFFECT_NIGHT_VISION_-1_0%
```

### Mob-Schutz Perks

```
%perks_status_NO_CREEPER_DAMAGE%
%perks_status_NO_ZOMBIE_DAMAGE%
%perks_status_NO_SKELETON_DAMAGE%
%perks_status_NO_SPIDER_DAMAGE%
%perks_status_NO_ENDERMAN_DAMAGE%
%perks_status_NO_BLAZE_DAMAGE%
%perks_status_NO_GHAST_DAMAGE%
%perks_status_NO_SLIME_DAMAGE%
%perks_status_NO_GUARDIAN_DAMAGE%
%perks_status_NO_ZOMBIFIED_PIGLIN_DAMAGE%
```

### Timer Placeholders

```
%perks_timer_GARDENER%
%perks_timer_FLY%
```

***

## Tipps & Best Practices

{% stepper %}
{% step %}

### 1. Testen von Placeholders

Verwende den PAPI-Parse Befehl zum Testen:

```
/papi parse <spieler> %perks_status_FLY%
```

{% endstep %}

{% step %}

### 2. Performance

Alle Placeholders sind optimiert und cachen Daten. Du kannst sie bedenkenlos in Scoreboards verwenden, die jede Sekunde aktualisieren.
{% endstep %}

{% step %}

### 3. Farben

Vergiss nicht, dass die Farben in der Config konfiguriert werden:

```yaml
replacementplaceholders:
  status:
    enabled: '&a✓'  # ← Hier ändern!
```

{% endstep %}

{% step %}

### 4. Debugging

Bei Problemen:

1. **Check ob PlaceholderAPI installiert ist:**

   ```
   /papi info perks
   ```
2. **Teste Placeholder direkt:**

   ```
   /papi parse <spieler> %perks_status_FLY%
   ```
3. **Check Plugin-Log:**

   ```
   [Perks] PlaceholderAPI integration enabled
   ```

{% endstep %}
{% endstepper %}

***

**Weitere Informationen:**

* [Beschreibung.md](broken://pages/bdc328c1a6001c9c58cf99f192ea914b0988952f) - Plugin-Übersicht
* [Konfiguration.md](broken://pages/1469ece7c982f482365606634f6ea8ce984e36f6) - Detaillierte Config-Anleitung
* [PerkTypes.md](broken://pages/4eca86a74fb447d25cd33f24261223541f5d7d8a) - Alle verfügbaren Perk-Typen

**Externe Links:**

* [ScoreboardPlus kaufen](https://dyroxplays.de/product/sbplus)
* [PlaceholderAPI Wiki](https://github.com/PlaceholderAPI/PlaceholderAPI/wiki)


# Funktionen & Setup-Anleitung

Biete deinen Spielern eine vollautomatisierte Möglichkeit, Grundstücke per Auktionshaus-GUI zur Versteigerung oder zum Sofortkauf anzubieten – vollständig integriert in PlotSquared.

{% hint style="success" %}
🎰 **Ermögliche einen einfachen, sicheren und interaktiven Handel mit Grundstücken auf deinem Citybuild-Server!**
{% endhint %}

## Features

{% tabs %}
{% tab title="🎰 Auktions-Features" %}

#### Grundstücks-Handel

* **Bieten & Sofortkauf:** Erstelle Auktionen mit einem Start-Bietpreis, einem Sofortkaufpreis oder einer Kombination aus beidem.
* **Mausklick-Steuerung:**
  * **Linksklick:** Grundstück kaufen (fremde Auktion) / Auktion löschen (eigene Auktion).
  * **Rechtsklick:** Auf das Grundstück bieten (fremde Auktion) / Zum Verkauf anbieten (eigene Auktion).
  * **Mittelklick:** Teleportiert den Spieler direkt zum angebotenen Plot zur Besichtigung.
    {% endtab %}

{% tab title="🏷️ Plotname-Feature" %}

#### Custom Plot-Namen

* **Beschreibung festlegen:** Spieler können ihren angebotenen Grundstücken per `/pahname <Name>` einen benutzerdefinierten Namen oder eine Beschreibung zuweisen, um das Angebot im Auktionshaus attraktiver zu gestalten.
* **Namens-Gebühr:** Der Namenswechsel kann in der Config an eine definierte Gebühr gekoppelt werden.
  {% endtab %}

{% tab title="🔌 Integration" %}

#### Schnittstellen

* **PlotSquared Support:** Kompatibel mit allen gängigen PlotSquared-Versionen (v5, v6 und v7).
* **Vault Support:** Vollständige Abwicklung aller Geldtransaktionen und Gebote über Vault.
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation & Voraussetzungen

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch. Stelle sicher, dass **Vault** (inkl. Wirtschaftssystem) und **PlotSquared** auf dem Server aktiv sind.
{% endstep %}

{% step %}

#### PlotSquared Version festlegen

1. Starte den Server einmal, damit `/plugins/PlotAuction/` und die standardmäßige `config.yml` erstellt werden.
2. Setze in der `config.yml` die entsprechende PlotSquared-Version auf `true` (z. B. `plotsquaredv6: true` oder `plotsquaredv5: true`).
3. Passe Steuern, minimale/maximale Auktionsdauer und das Plotname-Feature an.
   {% endstep %}

{% step %}

#### Server neu starten

Speichere die `config.yml` und starte den Server neu, um alle Features einsatzbereit zu haben.
{% endstep %}
{% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/plotauction</code></td><td>Öffnet die Auktionshaus-GUI für Grundstücke. (Aliase: <code>/plotauctions</code>, <code>/pah</code>, <code>/plotauktion</code>, <code>/pa</code>)</td><td><code>plotauction.use</code></td></tr><tr><td><code>/pahname &#x3C;Name></code></td><td>Gibt dem aktuell angebotenen Grundstück einen benutzerdefinierten Namen.</td><td><code>plotauction.plotname</code> <em>(wenn in Config aktiviert)</em></td></tr><tr><td>-</td><td>Erlaubt unbegrenzte gleichzeitige Auktionen.</td><td><code>plotauction.auctions.*</code> <em>(wenn Limitierung aktiv)</em></td></tr><tr><td>-</td><td>Begrenzt die maximalen Auktionen pro Spieler auf eine bestimmte Anzahl (NUMBER).</td><td><code>plotauction.auctions.&#x3C;anzahl></code> <em>(wenn Limitierung aktiv)</em></td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Passe die Auktionsgebühren, Gebots-Schritte, Welten-Einstellungen, PlotSquared-Versionen und das komplette GUI-Design flexibel in der `config.yml` an.

***

## Dateiübersicht

Das Plugin erstellt nach dem ersten Serverstart folgende Datei:

* **`plugins/PlotAuction/config.yml`**: Verwaltet alle Auktions-Einstellungen, GUI-Texte und Nachrichten.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Einstellungen" %}

#### Allgemeine Optionen & PlotSquared

```yaml
# Der Präfix vor Systemnachrichten
prefix: '&7[&ePlotAuction&7]'

# Kompatibilitätseinstellungen für deine PlotSquared-Version
plotsquaredv6: false
plotsquaredv5: false
oldplotsquaredversion: false
```

{% endtab %}

{% tab title="🏷️ Plotname Feature" %}

#### Plot-Naming

```yaml
plotnamefeature:
  enable: true # Ermöglicht das Ändern des Plot-Anzeigenamens
  permissionneed: false # Benötigt die Permission 'plotauction.name'
  price: 100 # Kosten in Geld
  minlenght: 3
  maxlenght: 16
```

{% endtab %}

{% tab title="💰 Auktions-Setup" %}

#### Gebote & Preise

```yaml
# Cooldown (in Sekunden), bevor man eine neue Auktion erstellen kann
newauctioncooldown: 5

# Erstellungsgebühren für Auktionen
pricefornewauction:
  price: 100 # Fixpreis für die Auktionserstellung
  percentageofbuy:
    enable: true
    percent: 10 # Prozentuale Gebühr basierend auf dem Sofortkaufpreis

# Gebotsschritte für das GUI (Stufe 1, 2, 3)
bidsteps:
  '1': 100
  '2': 10
  '3': 1

# Standarddauer einer Auktion in Stunden
auctiontimeinhour: 48

# Maximale Auktionen pro Spieler
maxauctionperplayer:
  enablepermissioncheck: false
  highestmax: 60
```

{% endtab %}

{% tab title="⏰ Zeitformate" %}

#### Einheiten-Bezeichnungen

```yaml
time:
  seconds: '&7Sekunden'
  mins: '&7Minuten'
  hours: '&7Stunden'
  days: '&7Tage'
```

{% endtab %}
{% endtabs %}

***

## GUI-Design und Item-Texte

Du kannst alle Beschreibungen der Auktions-Items und Menü-Titel frei anpassen:

```yaml
# Menütitel
guititle:
  main: '&6PlotAuctions'
  bid: '&6Plot Bid...'
  buynow: '&6Plot Buy now...'
  yourauction: '&6Your PlotAuctions'
  setbuyprice: '&6Set Plot buyprice'
  setstartbid: '&6Set start plot bid'

# Button-Texte
guiback: '&cZurück'

guibid:
  infoname: '&aDein aktueller Gebot:'
  acceptbid: '&a%bid% bieten.'

guinewauction:
  setbuyprice: '&aDein aktueller Kaufpreis:'
  setstartbid: '&aDein aktueller Startgebot:'
  next: '&aWeiter'

guiauction:
  yourauction:
    name: '&aDeine Plot Auctionen'
    lore: '&7Deine PlotAuctionen anzeigen'
    lorenull: '&cDu hast keine PlotAuctionen'
  sort:
    name: '&aSortierung'
    lore:
      newestfirst: '&7Neuste Auctionen zuerst'
      soonend: '&7Bald endende Auctionen zuerst'
  newauction:
    name: '&7Plot ausstellen'
    lore:
      itemnull: '&cBitte gehe auf deinen Plot'
      item: '&aPlot ausstellen'

# Item-Beschreibung der ausgestellten Auktionen
auctionlore:
- '&a'
- '&7Gebotsbetrag: %bid%'
- '&7Sofort-Kauf: %buyprice%'
- '&b'
- '&7Verkäufer: %seller%'
- '&c'
- '&7Ende: %end%'

# Sofortkauf-Bestätigung
guibuynow:
  infoname: '&aWillst du den Plot für %money% kaufen?'
  'yes': '&aJa'
  'no': '&cNein'
```

***

## System- und Fehlermeldungen

```yaml
messages:
  noperm: '&cDazu hast du keine Rechte.'
  teleport: '&aDu hast sich zu der Auction %name% geportet!'
  minusnumber: '&cDu kannst keine negative Zahl eintragen!'
  someoneisinbid: '&cJemand ist bereits für dieses Item am bieten!'
  someoneisinbuy: '&cJemand hat bereits das Kauffenster offen!'
  notenoughmoney: '&cDu hast nicht genügend Geld, du brauchst mindestens %money%!'
  toolow: '&cDu musst mindestens %bid% bieten!'
  bid: '&aDu hast erfolgreich %bid% geboten!'
  yourownauction: '&cDas ist deine eigene Auction!'
  nobids: '&cEs hat keiner geboten, also kannst du es nicht verkaufen!'
  nobidsgetback: '&cDein Item konnte nicht verkauft werden, du hast es zurückerhalten!'
  yourauctionfinished: '&aEine Auction von dir wurde verkauft!'
  creatednewauction: '&aEine neue Auction wurde erstellt!'
  yourgetauction: '&aDu hast die Auction gewonnen und das Plot gehört nun dir!'
  deletedauction: '&cAuction wurde gelöscht!'
  cooldownwait: '&cDu musst dich noch etwas gedulden!'
  maxreached: '&cDu hast DEIN maxium von Auctions erreicht!'
  notbought: '&cDu hast es nicht gekauft!'
  notonyourplot: '&cDu bist nicht auf deinem Plot!'
  plotisnotinauction: '&cDieses Plot ist nicht in einer Auction!'
  plotisinauction: '&cDieses Plot ist bereits in Auctionen!'
  startbidishigherthanprice: '&cDer Startgebotspreis ist höher als der Verkaufspreis, Auction wurde nicht erstellt!'
  broadcast:
    newauction: '&6%player% hat eine neue PlotAuction gestartet.'
  plotnamefeature:
    usage: '&cNutze: /pahname <Anzeigename>'
    notactivated: '&cName-Feature ist nicht aktiviert'
    confirm: '&7Bestätige indem du erneut &e/pahname %name% &7eingibst, ACHTUNG: Dies kostet dich %price% $'
    changed: '&aPlotname würde verändert'
    notsame: '&cDie Eingaben waren nicht identisch, Vorgang abgebrochen'
    wrong: '&cDer Name muss mind. %min% Buchstaben und %max% Buchstaben enthalten, erlaubt sind nur Buchstaben'
```


# Beschreibung

Lass deine Spieler die Grundstücke anderer Spieler auf einer Skala von 1 bis 10 bewerten – inklusive intelligentem Spamschutz, einer Top-Plot-Bestenliste und Admin-Verwaltung.

{% hint style="success" %}
⭐ **Fördere die Kreativität und den Bau-Wettbewerb auf deinem Citybuild-Server durch Spielerbewertungen!**
{% endhint %}

## Features

{% tabs %}
{% tab title="⭐ Bewertungssystem" %}

#### Ingame-Feedback

* **10-Sterne-Skala:** Einfache Bewertung über ein visuelles 10-Sterne-GUI-Menü.
* **Fake-Schutz (Playtime):** Lege eine Mindestspielzeit in Sekunden fest, die Spieler erreicht haben müssen, um eine Bewertung abgeben zu dürfen (verhindert Bot-Spam).
* **Rerate-Berechtigung:** Standardmäßig kann jeder Spieler ein Grundstück nur einmal bewerten, es sei denn, er besitzt die Rerate-Permission.
  {% endtab %}

{% tab title="🏆 Top-Plots" %}

#### Bestenliste

* **Top 5 Ranking:** Zeigt die aktuell fünf am besten bewerteten Grundstücke in einem übersichtlichen Menü an.
* **Direkt-Teleport:** Spieler können per Klick im Top-Plots-Menü direkt zu den jeweiligen Grundstücken reisen, um sie zu besichtigen.
  {% endtab %}

{% tab title="🔌 Integration" %}

#### Kompatibilität

* **PlotSquared Support:** Funktioniert nahtlos mit allen Versionen (v5, v6 und v7).
* **MySQL-Schnittstelle:** Zwingend erforderlich für die Speicherung der Bewertungen und Rankings.
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation & Voraussetzungen

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch. Stelle sicher, dass **PlotSquared** und ein MySQL-Server betriebsbereit sind.
{% endstep %}

{% step %}

#### MySQL & Config einrichten

1. Starte den Server einmal, damit `/plugins/PlotBewerten/` und die standardmäßige `config.yml` generiert werden.
2. Trage deine MySQL-Datenbankverbindung in der `config.yml` ein.
3. Lege die benötigte Spielzeit in Sekunden unter `neededplaytime` fest.
   {% endstep %}

{% step %}

#### Server neu starten

Speichere die Datei und starte den Server neu. Ab jetzt können Spieler mit dem Bewerten beginnen!
{% endstep %}
{% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/bewerten</code></td><td>Öffnet das Bewertungspanel für das Grundstück, auf dem man steht.</td><td><code>plotbewerten.rate</code></td></tr><tr><td><code>/topplots</code></td><td>Öffnet die GUI mit den 5 am besten bewerteten Grundstücken.</td><td>-</td></tr><tr><td><code>/abewerten reload</code></td><td>Lädt die Konfiguration des Plugins neu.</td><td><code>plotbewerten.admin</code></td></tr><tr><td><code>/abewerten reset &#x3C;PlotID></code></td><td>Setzt alle erhaltenen Bewertungen für ein bestimmtes Grundstück zurück.</td><td><code>plotbewerten.admin</code></td></tr><tr><td><code>/abewerten delete &#x3C;PlotID> &#x3C;Spieler></code></td><td>Löscht die abgegebene Bewertung eines spezifischen Spielers für ein Plot.</td><td><code>plotbewerten.admin</code></td></tr><tr><td>-</td><td>Umgeht die Mindestspielzeit-Hürde zum Bewerten.</td><td><code>plotbewerten.ignoreplaytime</code></td></tr><tr><td>-</td><td>Erlaubt das wiederholte Bewerten desselben Grundstücks.</td><td><code>plotbewerten.rerate</code></td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Passe das Aussehen des Bewertungs-Gegenstands, die MySQL-Datenbankverbindung, Mindestspielzeiten und die einzelnen GUIs des **PlotBewerten**-Plugins flexibel in der `config.yml` an.

***

## Dateiübersicht

Das Plugin erstellt nach dem ersten Serverstart folgende Datei:

* **`plugins/PlotBewerten/config.yml`**: Steuert alle globalen Einstellungen, GUI-Layouts und Nachrichten.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Einstellungen" %}

#### Allgemeine Optionen

```yaml
# Der Präfix vor allen Systemnachrichten
prefix: '&7[&6PlotBewerten&7]'

# Ermöglicht Spielern, sich durch Klick im TOP-GUI zum Plot zu teleportieren
click2teleport: true

# Mindestspielzeit in SEKUNDEN, die ein Spieler haben muss, um bewerten zu dürfen (14400 = 4 Stunden)
neededplaytime: 14400
```

{% endtab %}

{% tab title="🗄️ MySQL" %}

#### Datenbank-Optionen

> \[!WARNING] **Achtung Code-Schreibfehler:** Der Datenbank-Schlüssel in der MySQL-Sektion heißt **`datebase`** (mit "te" in der Mitte) statt `database`. Achte darauf beim Eintragen deines Datenbanknamens!

```yaml
MySQL:
  host: localhost
  port: '3306'
  username: root
  datebase: db12 # Schreibweise beachten!
  password: password239239
```

{% endtab %}

{% tab title="🏆 Top-Plots GUI" %}

#### TOP5-Menü Optionen

```yaml
topplots:
  invname: '&6PlotBewerten &bTOP5'
  lore:
  - '&7Rang: &a%rank%'
  - '&7Ø Bewertung: &e%average%'
```

{% endtab %}
{% endtabs %}

***

## Haupt-GUI anpassen (`gui`)

Du kannst das Aussehen aller Menü-Gegenstände in der GUI anpassen:

```yaml
gui:
  name: '&6PlotBewerten'
  lenght: 4 # Zeilenanzahl der GUI (1-6)
  
  # Platzhalter-Füllung (Slot-Bereich z. B. 0-36)
  placeholder:
    BLACK_STAINED_GLASS_PANE: 0-36

  items:
    # Das Informations-Item über das aktuelle Plot (Standard: Kopf des Besitzers)
    info:
      material: PLAYER_HEAD
      slot: 4
      name: '&ePlot Information'
      skullowner: '%plotowner%'
      lore:
      - '&7PlotOwner: %plotowner%'
      - '&7PlotId: &e%plotid%'
      - '&7Ranking: &e#%rank%'
      - '&7Ø Bewertung: &e%average%'
      - '&7Bewertungsanzahl: &e%raitings%'
      - '&7Deine Bewertung: &e%yourrating%'
      - '&8(0=noch nicht bewertet)'

    # Item, falls das Plot bereits vom Spieler bewertet wurde
    alreayrated:
      material: BARRIER
      name: '&cBereits bewertet'
      lore:
      - '&7Deine Bewertung: &e%yourrating%'
      
    # Bestätigungs-Button zum Absenden der Punkte
    confirm:
      material: ARROW
      name: '&aBewertung abgeben'
      slot: 17

    # Stern-Buttons 1 bis 10 (Beispiel für Stern 1)
    rate_1:
      material: NETHER_STAR
      amount: 1
      name: '&e1 &7/10 Bewertung abgeben'
      slot: 20
      lore:
      - '&7Klicke hier, um diese Bewertung anzuwählen'
      - '&7anschließend musst du noch bestätigen'
```

***

## Chat- und Systemnachrichten

```yaml
# Zusätzlicher Hover-Zustandstext im Menü
loreselected: '&aAusgewählt'

messages:
  noperm: '&cDazu hast du keine Rechte'
  rated: '&aDu hast das Plot %plotid% mit %points% Punkten bewertet.'
  notonplot: '&cDu bist auf keinem Plot, was du bewerten kannst!'
  alreayrated: '&cDu hast diesen Plot bereits bewertet!'
  notenoughplaytime: '&cDu hast noch nicht genug Onlinezeit, du benötigst noch %sec% Sekunden!'
  usage: '&cNutze: &E/abewerten <reset> <PlotID> &c=> resetet die Bewertung vom Plot auf 0 oder &e/abewerten <delete> <PlotID> <Spielername> &c=> Entfernt die Bewertung von Spielername'
  reset: '&aPlotId %plotid% wurde resettet, sofern es ein Plot ist und Bewertung hatte!'
  delete: '&aDie Bewertung von %player% für PlotId %plotid% wurde entfernt, sofern eine vorhanden gewesen war!'
```


# Funktionen & Setup-Anleitung

{% embed url="<https://youtu.be/mpr5JJPpy9k>" %}
Plugin Vorstellung auf YouTube
{% endembed %}

Das TNTRun-Plugin bietet eine umfassende und anpassbare Spielerfahrung, ähnlich wie auf großen Servern wie MineSucht.net. Mit Funktionen wie MapVoting, eigenem Weltenmanager, Worldreset und vielem mehr, lässt sich dieses Plugin perfekt in deinen Server integrieren. Alle Einstellungen können in der Konfigurationsdatei nach deinen Wünschen angepasst werden.

#### Funktionen

* **99% anpassbar in der Konfiguration:** Passen Sie nahezu alle Aspekte des Plugins an.
* **Ähnlich wie auf großen Servern:** Bietet eine ähnliche Spielerfahrung wie auf bekannten Servern wie MineSucht.net.
* **PremiumJoin:** Erlaubt Spielern mit der entsprechenden Berechtigung, auch bei vollem Server beizutreten (Permission: `tntrun.premiumjoin`).
* **MultiMaps:** Unterstützung für eine unbegrenzte Anzahl von Karten.
* **MapVoting:** Ermöglicht Spielern, für ihre bevorzugte Karte abzustimmen.
* **Flackerfreies Scoreboard:** Zeigt die Anzahl der Spieler auf derselben Ebene, über und unter dir.
* **Individuelle Scoreboards:** Lobby-, Spectator- und Ingame-Scoreboards können vollständig konfiguriert werden.
* **MySQL Unterstützung:** Speichert Statistiken und andere Daten in einer MySQL-Datenbank.
* **StatsSystem:** Verfolgen und anzeigen von Spielerstatistiken.
* **Top 10 Statswand:** Zeigt die besten 10 Spieler an einer Wand an.
* **Eigenes Weltenmanagement:** Kein Multiverse oder andere Weltenmanager erforderlich.
* **Worldreset:** Automatisches Zurücksetzen der Welt nach jedem Spiel.
* **Spectatorsystem:** Konfigurierbare Zuschauereinstellungen, inklusive Boost-Option.
* **Anpassbare Items:** Items wie der Knockback-Stick und Granaten können in der Config verändert werden.
* **Anpassbare Titel:** Alle Titel im Spiel können in der Konfiguration angepasst werden.
* **Befehl `/start` (Permission: `tntrun.start`):** Startet das Spiel manuell mit einem Countdown von 10 Sekunden.

#### Befehle

* **`/tntrun`** - Zeigt alle verfügbaren Befehle an.
* **`/tntrun setLobby`** - Setzt die Lobby-Position.
* **`/tntrun setSpawn`** - Setzt den Spawnpunkt in der angegebenen Welt.
* **`/tntrun setTopWall <1-10>`** - Setzt die Top 10 Statswand.
* **`/tntrun worldTP`** - Teleportiert den Spieler zu einer bestimmten Welt.
* **`/start`** - Startet das Spiel mit einem Countdown von 10 Sekunden.
* **`/stats`** - Zeigt die Statistiken des Spielers an.

#### Berechtigungen

* **`tntrun.admin`** - Erlaubt die Ausführung von `/tntrun` und das Betreten des Servers im Setup-Modus.
* **`tntrun.premiumjoin`** - Erlaubt das Beitreten eines vollen Servers (kickt einen Spieler ohne diese Berechtigung).
* **`tntrun.start`** - Erlaubt die Ausführung des Befehls `/start`.

#### Setup-Anleitung

1. **Plugin installieren:** Lade das Plugin auf deinen Server hoch.
2. **Lobby setzen:** Betrete den Server und setze die Lobby mit `/tntrun setLobby`. (Erfordert OP-Rechte oder die Berechtigung `tntrun.admin`, da der Server sich im Setup-Modus befindet.)
3. **Top 10 Wand erstellen:** Erstelle eine Wand mit einem Spielerkopf oben und einem leeren Schild unten. Gehe zum Spielerkopf und setze die Top 10 Wand mit `/tntrun setTopWall <1-10>`.
4. **Server stoppen:** Stoppe den Server.
5. **Maps hinzufügen:** Füge deine Maps in den Ordner `/plugins/TNTRun/saves` ein.
6. **MySQL konfigurieren:** Öffne die Konfigurationsdatei und trage deine MySQL-Daten ein.
7. **Server starten:** Starte den Server und trete ihm bei.
8. **Welten laden:** Alle Welten aus dem `saves`-Ordner sollten geladen werden (sofern `setup: true` in der Config gesetzt ist).
9. **Welt-Spawn setzen:** Teleportiere dich zu den Welten mit `/tntrun worldTP` und setze den Spawn für jede Arena mit `/tntrun setSpawn`. (ID für jede Welt separat festlegen.)
10. **Server stoppen:** Stoppe den Server erneut.
11. **Konfiguration anpassen:** Bearbeite die Konfigurationsdatei nach deinen Wünschen, z.B. Nachrichten anpassen.
12. **Setup-Modus beenden:** Setze in der Config `setup: false`. Dadurch werden nur noch maximal 9 zufällige Arenen geladen, die dann im MapVoting verfügbar sind. Nun können alle Spieler beitreten und das Spiel ist spielbereit.
13. **Server starten und spielen:** Starte den Server und beginne mit dem Spiel!

***

Diese Dokumentation sollte dir helfen, das TNTRun-Plugin erfolgreich zu konfigurieren und zu betreiben. Alle relevanten Einstellungen und Befehle sind hier beschrieben, um eine reibungslose Einrichtung zu gewährleisten.


# Konfiguration

Passe die MySQL-Anbindung, Spielzeiten, Tick-Despawns, Scoreboards, Ingame-Gegenstände und Nachrichten des **TNTRun**-Plugins flexibel in der `config.yml` an.

***

## Dateiübersicht

Das Plugin erstellt nach dem ersten Serverstart folgende Datei:

* **`plugins/TNTRun/config.yml`**: Verwaltet alle Spielregeln, MySQL-Datenbanken, GUI-Layouts und System-Chatnachrichten.

***

## Konfigurations-Bereiche

{% tabs %}
{% tab title="⚙️ Basis-Einstellungen" %}

#### Spielregeln & Ticks

```yaml
# Der Präfix vor Systemnachrichten
prefix: '&7[&cTNTRun&7]'

# Aktiviert den Setup-Modus (verhindert Beitreten ohne 'tntrun.admin')
setup: true

# Aktiviert Boosts für Zuschauer/Spectator
specproectionboost: true

# Mindestspielerzahl zum Start & maximale Slots
lobbystartab: 2
maxplayers: 8

# Anzahl der Granaten (Schneebälle), die Spieler erhalten
snowballamount: 1
```

{% endtab %}

{% tab title="🗄️ MySQL" %}

#### Datenbank-Optionen

> \[!WARNING] **Achtung Code-Schreibfehler:** Der Datenbank-Schlüssel in der MySQL-Sektion heißt **`datebase`** (mit "te" in der Mitte) statt `database`. Achte darauf beim Eintragen deines Datenbanknamens!

```yaml
host: localhost
port: '3306'
username: user
datebase: db # Schreibweise beachten!
password: password123
```

{% endtab %}

{% tab title="⏱️ Timer & Despawns" %}

#### Zeitliche Abläufe

```yaml
# Phasen-Timer (in Sekunden)
sec:
  lobby: 30
  restart: 15

# Blockabbau-Verzögerung in Server-Ticks (20 Ticks = 1 Sekunde)
blockdespawntick:
  tntremove: 3 # TNT-Verzögerung vor dem Herunterfallen
  blockremove: 5 # Sand-Verzögerung vor dem Herunterfallen
```

{% endtab %}

{% tab title="💻 MOTD & Chat" %}

#### Server-Ansicht

```yaml
# Server-Statusanzeige im Server-Browser (MOTD)
motd:
  lobby: '&aLOBBY'
  ingame: '&cINGAME'
  restart: '&cRESTART'

# Chat-Formatting
chatformat:
  enable: true
  normal: '&7%player%&8: &f%msg%'
  spec: '&7[&cX&7] &7%player%&8: &f%msg%'
```

{% endtab %}
{% endtabs %}

***

## Scoreboard-Design (`sb` & `sbueberschrift`)

Das Scoreboard ist flackerfrei und dynamisch aufgebaut, um die verbleibenden Spieler auf den jeweiligen Ebenen anzuzeigen:

```yaml
sbueberschrift: '&cTNTRun'

sb:
  title: '&cTNTRun'
  # Lobby-Scoreboard
  lobby:
  - '&a '
  - '&fMap:'
  - '&b%map%'
  - '&b '
  - '&fSpieler:'
  - '&c%online% / %max%'
  - '&c '
  - '&7Dyroxplays.de'
  
  # Live-Spiel-Scoreboard
  ingame:
    board:
    - '&a '
    - '&fMap:'
    - '&b%map%'
    - '&b '
    - '%playerinfo%' # Platzhalter für die Ebenen-Anzeigen
    - '&c '
    - '&fLebende Spieler:'
    - '&c%alive%'
    - '&d '
    - '&7Dyroxplays.de'
    
    # Anzeige der Spieler über, auf und unter der aktuellen Ebene
    playerinfo:
      down:
      - '&fSpieler unter dir:'
      - '&e%down%'
      same:
      - '&fSpieler auf deiner Ebene:'
      - '&e%same%'
      top:
      - '&fSpieler über dir:'
      - '&e%top%'
      
  # Zuschauer-Scoreboard
  spec:
  - '&a '
  - '&fMap:'
  - '&b%map%'
  - '&b '
  - '&fLebende Spieler:'
  - '&c%alive%'
  - '&c '
  - '&7Dyroxplays.de'
```

***

## Item-Konfigurationen (`items`)

Rüste die Spieler in den verschiedenen Phasen mit Items aus.

* **Format**: `SLOT;MATERIAL;SHORTID;DISPLAYNAME`

```yaml
mapvotingname: '&7MapVoting'

items:
  # Items in der Lobby-Phase
  lobby:
    mapvote: 0;PAPER;0;&7MapVoting
    leave: 8;SLIME_BALL;0;&cZur Lobby
  # Items für Zuschauer (Zuschauer-Kompass)
  spec:
    teleporter: 0;PLAYER_HEAD;0;&7Navigator
    leave: 8;SLIME_BALL;0;&cZur Lobby
  # Items im Spiel
  ingame:
    stick: 0;STICK;0;&3Schlagstock
    snowball: 1;SNOWBALL;0;&3Granate
```

***

## System- und Fehlermeldungen

```yaml
# Chat-Nachrichten
joinmessage: '&e%player% &eist gejoint'
quitmessage: '&e%player% &eist geleavt'
killmessage: '&c%player% &ewurde von &a%killer% &cgetötet'
deathmessage: '&c%player% &eist gestorben'
winnertitle: '&7%player% hat gewonnen.'

# Admin-Ausgaben
messages:
  help: |-
    &7====&6Help&7====
    &e/tntrun setLobby &7- Setze Lobby
    &e/tntrun setSpawn <worldID> &7- Setzt Spawnpunkt auf WorldID
    &e/tntrun setTopWall <1-10> &7- Setzt Top10 Wand
    &e/tntrun worldTP <worldname> &7- Lässt dich zu einer Welt teleportieren

    &e/start &7- Setzt StartCountdown auf 10 Sekunden
    &e/stats (<Spieler>) &7- Zeigt Stats von Spieler an

success:
  teleporttoplayer: '&aDu hast dich zu %player% geportet.'

error:
  serverkick:
    starting: '&cDer Server fährt noch hoch.'
    full: '&cKaufe dir ein Rang, um zu joinen. Der Server ist voll'
    fullfull: '&cDer Server ist voll'
    kickedpremium: '&cEin Premiumspieler ist gejoint und du wurdest gekickt, kaufe dir einen Rang.'
    setup: |-
      &cDer Server ist in &esetup: true &ceingestellt
       &cDu brauchst die &ePermission tntrun.admin &czum joinen
       &coder stellte in der Config &fsetup: false &cund &frestarte den Server
  worldnotexit: '&cDie Welt %name% ist nicht geladen.'
  playernotalive: '&c%player% ist bereits tot.'

# Statsausgabe (/stats)
stats:
- '&eStats von %player%'
- '&fKills: %kills%'
- '&fDeaths: %deaths%'
- '&fGespielt: %played%'
- '&fGewonnen: %wins%'
- '&fK/D: %kd%'
- '&fRang: %rang%'

# Statswand-Schilder
top10wall:
  line1: '&0--- Rank %rank% ---'
  line2: '&a'
  line3: '&0%player%'
  line4: '&0Wins: %wins%'
```


# Beschreibung

Ein hochgradig anpassbares, ressourcenschonendes System zur Gestaltung deines Server-Designs – inklusive flackerfreier Scoreboards, globaler TabList, Custom-Prefix-GUI und vollem HEX-Farbsupport.

{% hint style="success" %}
📋 **Passe Scoreboard, TabList, Actionbar, Bossbar und Chatformate vollkommen nach deinen Wünschen an!**
{% endhint %}

## Features

{% tabs %}
{% tab title="📊 Scoreboard" %}

#### Sidebar & Animationen

* **Animierte Sidebar:** Definiere flackerfreie, animierte Zeilen mit individuellen Update-Intervallen.
* **Force-New-Scoreboard:** Erstellt beim Betreten des Servers automatisch ein sauberes Scoreboard.
* **Toggle-Befehl:** Spieler können das Scoreboard bei Bedarf ein- oder ausblenden.
  {% endtab %}

{% tab title="👥 Ränge & TabList" %}

#### TabList- & Chat-Design

* **TabList Header & Footer:** Zeige nützliche Server-Infos über und unter der TabList.
* **Intuitives Ranksystem:** Die Reihenfolge in der Config legt die Sortierung in der TabList fest.
* **Custom Chat-Formate:** Definiere, welcher Rang welches Präfix im Chat erhält (deaktivierbar).
  {% endtab %}

{% tab title="🎨 Custom Prefix" %}

#### Prefix-Farbauswahl

* **Spieler-GUI:** Über `/prefix` können Spieler ihre persönliche Prefix-Farbe aus einem konfigurierbaren GUI-Menü wählen.
* **Berechtigungs-Check:** Schalte bestimmte Prefix-Farben exklusiv für VIPs oder Ränge frei.
  {% endtab %}

{% tab title="⚙️ Technik" %}

#### Performance & Support

* **Asynchroner Modus:** Ressourcenfreundlicher Betrieb ohne Lag-Gefahr.
* **HEX-Farbcodes:** Volle Unterstützung für moderne Farbverläufe (RGB/HEX) ab Version 1.16.
* **PlaceholderAPI Integration:** Eigene Platzhalter wie `%sbplus_dpname%`, `%sbplus_rang%`, `%sbplus_chatprefix%` und `%sbplus_tabprefix%` stehen bereit.
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation & Abhängigkeiten

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch. Stelle sicher, dass **PlaceholderAPI** (und optional **ProtocolLib**) auf dem Server installiert sind.
{% endstep %}

{% step %}

#### Ranksystem definieren

1. Starte den Server einmal, damit die Standard-Dateien generiert werden.
2. Trage deine Server-Ränge in `/plugins/ScoreboardPlus/config.yml` im Abschnitt `ranks` ein.
3. Verwende das Format: `PERMISSION;RANGNAME IM SCOREBOARD;CHATPREFIX;TABPREFIX` *(Die Reihenfolge von oben nach unten bestimmt die Sortier-Priorität in der TabList).*
   {% endstep %}

{% step %}

#### Custom Prefixes anlegen

Passe die Prefix-Optionen und deren Permissions in `/plugins/ScoreboardPlus/customprefixes.yml` an. Starte danach den Server neu oder führe `/scoreboardplus reload` aus.
{% endstep %}
{% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/scoreboardplus reload</code></td><td>Lädt alle Konfigurationen und Prefixes neu. (Alias: <code>/sbplus reload</code>)</td><td><code>scoreboardplus.reload</code></td></tr><tr><td><code>/scoreboardplus togglesb</code></td><td>Blendet das Scoreboard ein oder aus.</td><td><code>scoreboardplus.togglesb</code> <em>(wenn in Config aktiviert)</em></td></tr><tr><td><code>/scoreboardplus toggleactionbar</code></td><td>Blendet die Actionbar ein oder aus.</td><td><code>scoreboardplus.toggleactionbar</code> <em>(wenn in Config aktiviert)</em></td></tr><tr><td><code>/scoreboardplus togglebossbar</code></td><td>Blendet die Bossbar ein oder aus.</td><td><code>scoreboardplus.togglebossbar</code> <em>(wenn in Config aktiviert)</em></td></tr><tr><td><code>/customprefix</code></td><td>Öffnet die GUI zur Auswahl der Prefix-Farbe. (Alias: <code>/prefix</code>)</td><td>-</td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

In diesem Abschnitt wird die vollständige Konfiguration des **ScoreboardPlus** Plugins sowie alle verfügbaren Optionen und deren Funktionen erklärt.

***

## Dateiübersicht

Das Plugin generiert nach dem ersten Serverstart folgende Konfigurationsdateien im Ordner `/plugins/ScoreboardPlus/`:

* **`config.yml`**: Die Hauptkonfigurationsdatei für Scoreboards, Chat-Formate, Welten, Actionbar, Bossbar und die MySQL-Anbindung.
* **`customprefixes.yml`**: Konfiguration der Prefix-Farbauswahl (über `/prefix`), die Spieler im Menü auswählen können.

***

## config.yml

Die Hauptkonfigurationsdatei des Plugins. Alle Optionen sind in logische Bereiche unterteilt.

### Basis-Einstellungen & Chat

```yaml
# Der Präfix für alle Systemnachrichten
prefix: '&7[&cScoreboard+&7]'

# Chat-Formate aktivieren und konfigurieren
chat:
  enable: true
  format: '%sbplus_dpname%: &f%msg%'
  
  # Globaler Chat (serverübergreifend via MySQL)
  global:
    enable: false
    format: '&7%sbplus_dpname%: &f%msg%'
    copymsgfromchat: true
```

* **`chat.enable`**: Aktiviert das integrierte Chatformat-System.
* **`chat.format`**: Legt das standardmäßige Chat-Layout fest. Unterstützt PlaceholderAPI-Platzhalter.
* **`chat.global.enable`**: Aktiviert den globalen Chat (erfordert MySQL).

***

### Datenbankverbindung (MySQL)

```yaml
MySQL:
  enable: false
  host: localhost
  port: '3306'
  username: user
  datebase: db
  password: password123
```

* **`MySQL.enable`**: Aktiviere MySQL, um Einstellungen (wie die ausgeblendeten Scoreboards oder Custom Prefixes) serverübergreifend zu speichern.

***

### Befehls-Toggles (Ein- & Ausblenden)

```yaml
togglecmd:
  sb:
    enable: true
    permissionneed: false
  actionbar:
    enable: true
    permissionneed: false
  bossbar:
    enable: true
    permissionneed: false
```

* **`enable`**: Legt fest, ob Spieler das jeweilige Element ein- oder ausblenden können.
* **`permissionneed`**: Wenn `true`, benötigen Spieler die entsprechende Permission (z. B. `scoreboardplus.togglesb`), um den Befehl auszuführen.

***

### Scoreboard (Sidebar)

```yaml
# Erzwingt die Neuerstellung des Scoreboards beim Joinen (Empfohlen)
forcenewscb: true

sb:
  # Aktiviert die Scoreboard-Anzeige
  enable: true
  
  # Nutzt Packet-basiertes Scoreboard (nur für Versionen 1.8.x empfohlen)
  packets: false
  
  # Aktiviert Titel- und Zeilenanimationen
  animated: false
  
  # Führt Updates im asynchronen Thread aus (Ressourcenschonend)
  async: true
  
  # Update-Intervall in Ticks (20 Ticks = 1 Sekunde)
  updatesec: 1200
  
  # Titel des Scoreboards
  title: '&aDyroxplays.de'
  
  # Zeilen des Scoreboards
  board:
  - '&a '
  - '&fRang:'
  - '&e%sbplus_rang%'
  - '&b '
  
  # Formatierung der Zeilennummern (blank = keine Zahlen anzeigen)
  number-format: blank
```

***

### TabList & Ranksystem

```yaml
# Update-Geschwindigkeit für Header und Footer
tabheaderfooter:
  updateticks: 100
  forall: true
  header: '&aScoreboardPlus%n%'
  footer: '%n%&7coded by &eDyroxplays'

tab:
  enable: true
  async: true
  customprefix: true
  updatesec: 1200
  updateonlyonjoin: true
  
  # Suffix & Prefix in der TabList
  suffix: ' '
  prefix: '%sbplus_tabprefix%'
  
  # Statische Präfixe
  static:
    pre-prefix: ''
    pos-prefix: ''
```

* **`ranks`**: Legt die Ränge und deren Aussehen in TabList, Chat und Scoreboard fest. Die Reihenfolge bestimmt die TabList-Sortierung (von oben nach unten).

  Das Format unterscheidet sich leicht zwischen normalen (permission-basierten) Rängen und dem Standard-Rang (letzter Eintrag ohne Permission):

  * **Normale Ränge:** `'PERMISSION;RANGNAME;CHATPREFIX;TABPREFIX;[NAME_COLOR]'` (5 Parameter)

  * **Standard-Rang:** `'RANGNAME;CHATPREFIX;TABPREFIX;[NAME_COLOR]'` (4 Parameter)

  > \[!TIP] Der optionale Parameter **`NAME_COLOR`** (z. B. `&c` für Rot oder `#FF5555` für Hex-Rot) bestimmt die Farbe, in welcher der Spielername selbst in der TabList dargestellt wird. Fehlt dieser Parameter, wird die Namensfarbe nicht explizit überschrieben.

  ```yaml
  ranks:
  - 'rank.0001;&4Owner;&4Owner &7| ;&4Owner &7| ;&4'
  - 'rank.0002;&4Admin;&4Admin &7| ;&4Admin &7| ;&c'
  - 'rank.0003;&bDev;&bDev &7| ;&bDev &7| ;&b'
  - 'rank.0004;&2Mod;&2Mod &7| ;&2Mod &7| ;&a'
  - '&7Spieler;&7Spieler &7| ;&7Spieler &7| ;&7'
  ```

***

### Actionbar & Bossbar

```yaml
actionbar:
  enable: true
  async: true
  resendticks: 10
  updatesec: 10
  restartifatend: true
  messages:
  - '&7Dies ist die &eErste &7Nachricht'
  - '&dNutze Platzhalter!'
  
bossbar:
  enable: true
  async: true
  resendticks: 10
  updatesec: 10
  restartifatend: true
  messages:
  - 'PINK;33;SOLID;&7Erste Nachricht'
  - 'PINK;66;SOLID;&dNutze Platzhalter!'
  - 'PINK;100;SOLID;&aVollkommen anpassbar'
```

* **Bossbar Format**: `FARBE;PROZENT;STIL;NACHRICHT`
  * **Farben**: `PINK`, `BLUE`, `RED`, `GREEN`, `YELLOW`, `PURPLE`, `WHITE`
  * **Stile**: `SOLID`, `SEGMENTED_6`, `SEGMENTED_10`, `SEGMENTED_12`, `SEGMENTED_20`

***

## Systemnachrichten

Alle Chat-Meldungen des Plugins lassen sich am Ende der `config.yml` anpassen:

```yaml
messages:
  noperm: '&cDazu hast du keine Rechte'
  toggle:
    on: '&a%type% wurde aktiviert'
    off: '&a%type% wurde deaktiviert'
```

***

## customprefixes.yml

In dieser Datei wird das farbliche Prefix-Auswahlmenü definiert, welches Spieler mit dem Befehl `/prefix` (oder `/customprefix`) öffnen können.

### Menü-Design & Reset-Optionen

```yaml
# Anzahl der Zeilen im GUI-Menü (1-6)
gui.size: 2

# Name der GUI (unterstützt Farbcodes)
gui.name: '&aCustomPrefix'

# Lore-Beschreibungen für die Gegenstände im Menü
lore:
  selected: '&aAusgewählt'
  selectable: '&7Auswählbar'
  noperm: '&cKeine Rechte'
  preview: '&7Vorschau: &r%preview%'

# Reset-Item, mit dem Spieler ihren Custom-Prefix entfernen können
reset:
  material: BARRIER
  name: '&fReset'
  shortid: 0
  slot: 16
```

***

### Eigene Prefixes definieren (`prefixes`)

Unter dem Key `prefixes` definierst du seiten- und slotbasiert alle auswählbaren Präfix-Farben.

#### Konfigurations-Struktur:

```yaml
prefixes:
  '<Page>':
    '<Slot>':
      material: Material-Name (z.B. WHITE_STAINED_GLASS oder PLAYER_HEAD)
      name: Anzeigename des Items im Menü
      shortid: Sub-ID / Haltbarkeit des Items
      permission: Permission, die zum Auswählen benötigt wird (z. B. 'prefix.white')
      interstep: Intervall, nach wie vielen Zeichen die Farbe wechselt
      colors:
        - Liste der Farbcodes (z. B. '&f' oder HEX-Codes wie '#FF0000')
```

#### Funktionsweise & Farbeffekte:

Wenn ein Spieler einen Custom Prefix auswählt, passiert Folgendes:

1. Das Plugin nimmt den standardmäßigen Rang-Präfix (aus `config.yml`) und den Namen des Spielers.
2. Alle standardmäßigen Farbcodes werden entfernt, aber Stile wie **Fett** (`&l`) bleiben erhalten.
3. Die Zeichen des Präfixes und des Spielernamens werden nacheinander mit den Farben aus der Liste `colors` eingefärbt.
4. **`interstep`** steuert, wie viele Zeichen nacheinander dieselbe Farbe behalten, bevor die nächste Farbe aus der Liste gewählt wird.

#### Beliebte Effekte (Beispiele):

* **Klassisch Einfarbig (z. B. Weiß):** `colors: ["&f"]` mit `interstep: 1` -> Alle Zeichen werden weiß eingefärbt.
* **Farbwechsel im Intervall (z. B. Double Red):** `colors: ["&4", "&c"]` mit `interstep: 2` -> Die ersten 2 Zeichen werden dunkelrot (`&4`), die nächsten 2 rot (`&c`), dann wieder dunkelrot, usw.
* **Regenbogen-Effekt (Gradient):** `colors: ["&c", "&e", "&a", "&6", "&b"]` mit `interstep: 1` -> Jedes Zeichen erhält eine andere Farbe in zyklischer Reihenfolge.
* **HEX-Farben (Minecraft ab 1.16+):** Du kannst auch moderne RGB/Hex-Farben verwenden (z. B. `#FF0000`).

***

## playercustomprefix.yml

Diese Datei wird vom System automatisch generiert und verwaltet. Sie speichert die IDs der ausgewählten Custom Prefixes der Spieler (inklusive UUID, Seite und Slot) lokal auf dem Server, sofern keine MySQL-Anbindung aktiv ist. Sie muss nicht manuell bearbeitet werden.


# Beschreibung

Verbinde Trichter über weite Entfernungen miteinander, um vollautomatische Sortiersysteme und Kistenlager zu errichten – inklusive Radius-Einsammlung, Stack-Transfers und PlotSquared-Integration.

{% hint style="success" %}
🚧 **Maximiere die Leistung deines Servers durch reduzierte Trichter-Lags und effizientes Radius-Einsammeln!**
{% endhint %}

## Features

{% tabs %}
{% tab title="🔗 Linked Hopper" %}

#### Verbindungs-Features

* **Entfernungs-Verbindung:** Verbinde einen Trichter drahtlos mit einer Kiste oder einem anderen Trichter über weite Distanzen hinweg.
* **Radius-Einsammlung:** Trichter saugen Items innerhalb eines konfigurierbaren Radius automatisch ein, wodurch Entities am Boden minimiert werden (spart wertvolle Server-Performance).
* **Stack-Transfer:** Items können entweder vanilla-konform (einzeln) oder als vollständiger Stack transportiert werden.
  {% endtab %}

{% tab title="🎯 Filter-System" %}

#### Sortierung & Filter

* **Präzises Filtern:** Lege genau fest, welche Items der Trichter einsaugen oder transportieren soll.
* **Erweiterte Kriterien:** Filtere nicht nur nach Material, sondern auch nach Displaynamen, Beschreibungen (Lore) oder spezifischen Verzauberungen.
  {% endtab %}

{% tab title="🔌 Integration" %}

#### Regionen & Datenbanken

* **PlotSquared Support:** Verhindert standardmäßig das Verbinden über Wege (Roads) hinweg und schützt fremde Plots (Bypass per Permission).
* **Storage-Typen:** Unterstützt YAML, SQLite (lokal) und MySQL (für Netzwerke).
* **Live-Migration:** Migriere deine gesamten Trichterverbindungen live im Betrieb.
  {% endtab %}
  {% endtabs %}

***

## Setup-Anleitung

{% stepper %}
{% step %}

#### Installation

Lade die `.jar`-Datei in das `/plugins/` Verzeichnis deines Servers hoch.
{% endstep %}

{% step %}

#### Speicher-Typ konfigurieren

1. Starte den Server einmal, damit `/plugins/Trichtersystem/` und die standardmäßige `config.yml` erstellt werden.
2. Wähle in der `config.yml` deinen Speicher-Typ (z. B. `SQLite` oder `MySQL`).
3. Passe Steuern, Verbindungs-Distanzen und Filter-Optionen an.
4. Führe `/linkedhopper reload` aus.
   {% endstep %}
   {% endstepper %}

***

## Commands & Permissions

<table><thead><tr><th width="250">Befehl</th><th>Beschreibung</th><th width="250">Permission</th></tr></thead><tbody><tr><td><code>/linkedhopper reload</code></td><td>Lädt die Config und GUIs neu.</td><td><code>linkedhopper.admin</code></td></tr><tr><td><code>/linkedhopper migrate &#x3C;from> &#x3C;to> [override]</code></td><td>Migriert die Trichterdatenbank. Erlaubt: <code>YAML</code>, <code>SQLITE</code>, <code>MYSQL</code>.</td><td><code>linkedhopper.admin</code></td></tr><tr><td>-</td><td>Erlaubt das Platzieren und Verbinden von Trichtern ohne Einschränkungen.</td><td><code>linkedhopper.admin</code></td></tr><tr><td>-</td><td>Erlaubt das Verbinden von Trichtern über PlotSquared-Wege (Roads) hinweg.</td><td><code>linkedhopper.overroad</code></td></tr><tr><td>-</td><td>Erlaubt das Nutzen von Trichterverbindungen (wenn in Config aktiviert).</td><td><code>linkedhopper.use</code></td></tr><tr><td>-</td><td>Erforderlich, um Trichter abzubauen (wenn in Config aktiviert).<br>⚠️ Wichtiger Schreibfehler im Code: Die Permission heißt <code>linkedhopper.destory</code> (nicht destroy).</td><td><code>linkedhopper.destory</code></td></tr></tbody></table>

## Support & Links

* 🌐 **Plugin-Website**: [https://dyroxplays.de](https://dyroxplays.de/)
* 💬 **Discord**: Dyroxplays
* 🔌 **Weitere Plugins**: <https://dyroxplays.de/shop>

***

{% hint style="success" %}
**Coded by Dyroxplays**

© 2024-2026 Dyroxplays. Alle Rechte vorbehalten.
{% endhint %}


# Konfiguration

Passe die Trichterreichweiten, Transportmengen, Speicher-Optionen und die verschiedenen Menü-Designs flexibel an.

***

## Dateiübersicht

Nach dem ersten Serverstart generiert das Plugin folgende Konfigurationsdateien im Ordner `/plugins/Trichtersystem/`:

* **`config.yml`**: Die Hauptkonfigurationsdatei für globale Einstellungen, Welten-Freischaltungen und die Datenbankanbindung.
* **`maingui.yml`**: Konfiguration der Benutzeroberfläche und Items des Hauptmenüs (Sammelradius, Stack-Transfers, etc.).
* **`multiconnectorgui.yml`**: Konfiguration der Benutzeroberfläche für Mehrfachverbindungen.
* **`hopper.yml`**: Lokale Verbindungs-Datenbank (wird nur erstellt, wenn `storage.type` auf `YAML` gesetzt ist).

***

## config.yml

Die Hauptkonfigurationsdatei des Plugins. Alle Optionen sind in logische Bereiche unterteilt.

### Basis-Einstellungen

```yaml
# Der Präfix vor Systemnachrichten
prefix: '&7[&6LinkedHopper&7]'

# Ticks zwischen den Radius-Einsammelvorgängen (20 Ticks = 1 Sekunde)
schedulepickupticks: 200

# Tick-Geschwindigkeit bei aktiviertem 'Force Fast Tick'
fasttick: 5

# Maximaler Radius, den Spieler für einen Trichter einstellen können
maxpickupradius: 7

# Maximale Verbindungsdistanz in Blöcken
maxdistanceblocksofconnection: 30.0

# Benötigen Spieler zum Nutzen die Permission 'linkedhopper.use'?
permissionneededtouse: true

# Sollen Verbindungspartikel asynchron gerendert werden (Performance-schonend)?
spawnparticleasync: true
```

***

### Speicherung & MySQL (storage)

Das Speichersystem unterstützt drei Speicher-Typen. Falls MySQL genutzt wird, müssen die Zugangsdaten zwingend unter `storage.mysql` eingetragen werden.

> \[!IMPORTANT] **Korrektur der MySQL-Pfade:** Die Zugangsdaten befinden sich **nicht** unter dem Hauptschlüssel `MySQL`, sondern verschachtelt unter **`storage.mysql`**. Bitte verwende exakt die folgende Struktur:

```yaml
storage:
  # Mögliche Werte: SQLITE, MYSQL, YAML
  type: SQLITE
  
  # Speicherintervall in Sekunden
  save-interval-seconds: 60
  
  # MySQL Verbindungsdaten (nur aktiv bei type: MYSQL)
  mysql:
    host: localhost
    port: '3306'
    username: root
    database: linkedhopper
    password: password123
```

***

### Schutz & PlotSquared (destory / whereenable)

> \[!WARNING] **Achtung Code-Schreibfehler:** In der Konfiguration und in den Permissions ist die Zerstörungs-Option als **`destory`** (mit "o" vor "r") benannt. Achte auf die korrekte Schreibweise im Config-Key!

```yaml
destory:
  onlywithpermission: false # Abbau nur mit Permission 'linkedhopper.destory'
  needpermission: false
  havebeownerofhopper: false # Nur der Ersteller darf den Trichter abbauen

# PlotSquared Welteneinstellungen
whereenable:
  alloweverywhere: true
  worlds:
    enablethisfeature: false
    onthelistenable: true
    list:
    - world
  ONLYonplots: false # Trichterverbindungen NUR auf Grundstücken erlauben
  onplots: true
```

***

## maingui.yml

Diese Datei steuert das Aussehen und das Verhalten des Trichter-Hauptmenüs.

```yaml
gui:
  # Name der GUI
  name: '&7Trichter'
  # Anzahl der Zeilen (1-6)
  lenght: 5

# Formatierung für freie Plätze im Inventar
placeholder:
  enable: true
  # Format ab Version 1.13: MATERIALNAME: "Slots"
  # Format bis 1.12: MATERIAL;SHORTID: "Slots" (z.B. STAINED_GLASS_PANE;15: "0-45")
  BLACK_STAINED_GLASS_PANE: "0-45"

# Detailbeschreibungen des Filters im GUI
filteredItemlore:
  nofilter:
  - '&7Aktuell kein Filter aktiviert'
  - '&7Klicke auf ein Item in deinem Inventar,'
  - '&7welches du filtern möchtest'
  filter:
  - '&7Aktuell wird dieses Item gefiltert'
  - '&a'
  - '&7Aktuelle Filtereinstellungen'
  - '&7Enchantmentsfilter: %ENCHANTMENT%'
  - '&7Beschreibungsfilter: %LORE%'
  - '&7Displaynamefilter: %DISPLAYNAME%'
  - '&b'
  - '&fOHNE Shiftklick &7kannst du zwischen den Filtern wechseln'
  - '&fMIT Shiftklick &7kannst du den Filter ausschalten'

# Definition aller Funktionselemente im Menü
items:
  # Stackgröße für den Transfer (z.B. 1, 12, 32, 64)
  transportAmount:
    '1':
      material: CHEST
      name: '&7Items werden &e&leinzeln &7transferiert'
      amount: 1
      slot: 10
    '64':
      material: CHEST
      name: '&7Items werden &e&lStackweise &7transferiert'
      amount: 64
      slot: 10
  
  # Schnelles Redstone-Ticking (Force Fast Tick)
  forcefasttick:
    enabled:
      material: DIAMOND_BOOTS
      name: '&b&lForce Fast Tick &a&lAKTIV'
      slot: 11
      lore:
      - '&7Status: &a&lAKTIV'
      - '&7Klicke zum Deaktivieren'
    disabled:
      material: DIAMOND_BOOTS
      name: '&b&lForce Fast Tick &c&lINAKTIV'
      slot: 11
      lore:
      - '&7Status: &c&lINAKTIV'
      - '&7Klicke zum Aktivieren'
      
  # Info über Trichter-ID, Ziel und Radius
  info:
    material: HOPPER
    name: '&6Trichter'
    slot: 13
    lore:
    - '&7ID: &e%id%'
    - '&7Verbunden mit:'
    - '&7  Welt: &e%targetloc_world%'
    - '&7  X: &e%targetloc_x%'
    - '&7  Y: &e%targetloc_y%'
    - '&7  Z: &e%targetloc_z%'
    - '&7PickupRadius: &e%pickupradius%'
    
  # Partikel anzeigen
  showconnections:
    material: ENDER_EYE
    name: '&dVerbindungen & Aufsammelbereich anzeigen'
    slot: 16
    lore:
    - '&7Zeigt kurz die Verbindungen mit Partikeln an'
    
  # Mehrfachverbindung öffnen
  multiconnections:
    material: REPEATER
    name: '&eMehrfachverbindungen'
    slot: 15
    lore:
    - '&7Verbinde einzelne Materialien mit unterschiedlichen Ausgängen'
    
  # Status der Verbindung
  connected:
    material: ARROW
    name: '&bVerbinden'
    slot: 34
    lore:
    - '&7Aktueller Blocktype: &e%targetblocktype%'
    - '&7Ziel-Location:'
    - '&7  Welt: &e%targetloc_world%'
    - '&7  X: &e%targetloc_x%'
    - '&7  Y: &e%targetloc_y%'
    - '&7  Z: &e%targetloc_z%'
    - '&7&lOhne &7Shiftklick kannst du einen neuen Trichter auswählen'
    
  # Filter-Status
  filteredItem:
    material: BARRIER
    name: '&6Alle Items werden aufgesammelt'
    slot: 28

  # Radius verringern (-1)
  minus:
    material: PLAYER_HEAD
    name: '&c-1'
    skullowner: 'eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTNkN2E5ZWUzMTM0OGEzNTc1NDM4M2MxNjdmYTMzYWJjMDJlOGU2OGNhMmM0YTk2OTE0MDBlN2ZlMzRiM2ViNSJ9fX0='
    slot: 30
    lore:
    - '&7Radius verringern'

  # Radius Info
  radiusinfo:
    material: HOPPER_MINECART
    name: '&6Sammelradius'
    slot: 31
    lore:
    - '&7Gegenstände werden im Radius von &e%pickupradius% &7eingesammelt.'

  # Radius erhöhen (+1)
  plus:
    material: PLAYER_HEAD
    name: '&a+1'
    skullowner: 'eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTcxZDg5NzljMTg3OGEwNTk4N2E3ZmFmMjFiNTZkMWI3NDRmOWQwNjhjNzRjZmZjZGUxZWExZWRhZDU4NTIifX19'
    slot: 32
    lore:
    - '&7Radius erhöhen'
```

***

## multiconnectorgui.yml

Dieses Menü steuert das Zuweisen von material-spezifischen Verbindungen.

```yaml
gui:
  name: '&7Mehrfachverbindungen'
  lenght: 6

placeholder:
  enable: true
  BLACK_STAINED_GLASS_PANE: "0-54"

# Die Lore-Darstellung für bereits verknüpfte Materialien
materialConnectionLore:
- '&7Aktueller Blocktype: &e%targetblocktype%'
- '&a'
- '&7Ziel-Location:'
- '&7  Welt: &e%targetworld%'
- '&7  X: &e%targetx%'
- '&7  Y: &e%targety%'
- '&7  Z: &e%targetz%'

items:
  info:
    material: REPEATER
    name: '&eMehrfachverbindungen'
    slot: 4
    lore:
    - '&7Verbinde einzelne Materialien mit'
    - '&7unterschiedlichen Ausgängen'
    - '&a'
    - '&7Klicke auf ein Material in deinem Inventar'
    - '&7und dann auf einen Block, um eine'
    - '&7material-spezifische Verbindung zu erstellen'
    
  back:
    material: PLAYER_HEAD
    name: '&cZurück'
    slot: 45
    shortid: 3
    skullowner: 'eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjdhYWNhZDE5M2UyMjI2OTcxZWQ5NTMwMmRiYTQzMzQzOGJlNDY0NGZiYWI1ZWJmODE4MDU0MDYxNjY3ZmJlMiJ9fX0='
    lore:
    - '&7Zurück zum Hauptmenü'
    
  addconnector:
    material: LIME_DYE
    name: '&aVerbindung hinzufügen'
    slot: 53
    shortid: 10
    lore:
    - '&7Halte ein Material in der Hand'
    - '&7und klicke hier, um eine neue'
    - '&7Verbindung zu erstellen'
```

***

## Systemnachrichten

Alle Chat-Meldungen des Plugins lassen sich am Ende der `config.yml` anpassen:

```yaml
messages:
  alreadyopen: '&cDieser Trichter ist aktuell bereits von Jemanden geöffnet!'
  noperm: '&cDazu hast du keine Rechte'
  onlyplotowner: '&cDas kann nur der PlotOwner!'
  overroad: '&cDu kannst nicht über Straßen Trichter verbinden!'
  radiusoverplot: '&cDu kannst den Radius nicht weiter erhöhen, weil es sonst über den Plot hinaus gehen würde!'
  connecting:
    interact: '&7Bitte klicke nun einen Trichter an, mit dem du diesen Trichter verbinden willst'
    set: '&aTrichter %from% leitet nun an Trichter %to% weiter'
    error: '&cDu kannst diese beiden Trichter nicht mit einander verbinden'
    cancel: '&cVorgang wurde abgebrochen'
```


