# WP Ingame Shop Pro Ein leistungsstarker, vollständig eigenständiger Ingame-Shop für WordPress, entwickelt für Minecraft-Server (Spigot/Paper). Er bietet ein komfortables Warenkorb-System, Gutscheine, Daily Deals, eine benutzerdefinierte Währung und ein **Item-Ankauf-System** – komplett ohne RCON. Dieses Plugin nutzt eine eigene Datenbankstruktur für maximale Performance und vollständige Unabhängigkeit von WordPress-Beiträgen. --- ## ✨ Highlights - 🛒 **Warenkorb-System** Mehrere Items pro Bestellung. Eine Bestellung = eine saubere Datenbankzeile mit JSON-Details. - ⚡ **Mehrfachbearbeitung (Bulk Edit)** Hunderte Items gleichzeitig bearbeiten (Preis, Server, Kategorie, Status, **Ankauf**). - 💰 **Eigene Währung** „Coins", „Tokens" oder beliebige virtuelle Währungen. - 🖼️ **Automatische Bildzuweisung** `minecraft:diamond` → `minecraft_diamond.png` Ideal für große Bildsammlungen (1500+ Dateien). - 🔥 **Daily Deal & Sale-System** - 🎫 **Smart Coupons** Prozent- oder Festbetrag, optional nicht kombinierbar mit Angeboten. - 🔄 **Item-Ankauf-System** Spieler können Items direkt ingame an den Shop verkaufen. Ankaufspreis pro Item konfigurierbar (% vom VK, Festpreis oder VK minus Betrag). - ✈️ **Fly-Abo-System** Monatlich abgebuchtes Abonnement mit tägl. Stunden-Limit (Standard: 6h). Kauf im Shop, Verwaltung & Kündigung vollständig ingame. - 📦 **Plot-Slot-System** Zusätzliche PlotSquared-Slots einmalig kaufen oder monatlich abonnieren. Integration über LuckPerms (`plots.plot.` Permission), vollautomatisch. - 🌐 **REST API ohne RCON** - 📊 **Top-Spender & Umsatzstatistik** --- ## 🚀 Installation ### WordPress Plugin 1. Ordner `wp-ingame-shop-pro` nach: ``` wp-content/plugins/ ``` 2. Plugin im WordPress Backend aktivieren. 3. Fertig. Bei Aktivierung werden automatisch erstellt: - Datenbanktabellen (`wp_wis_*`) - Cron-Jobs für Daily Deals ### Spigot/Paper Plugin 1. `IngameShopSpigot.jar` in den `plugins/`-Ordner des Servers legen. 2. Server starten – `config.yml` wird automatisch erstellt. 3. `config.yml` ausfüllen (WordPress-URL, API-Key, Server-Name). 4. `/wpis reload` oder Server neu starten. **Voraussetzungen:** Vault + ein Economy-Plugin (z.B. EssentialsX) --- # ⚙️ Spigot Plugin Konfiguration ```yaml # WordPress-URL (kein abschließendes /) wordpress-url: "https://deine-domain.de" # API-Key aus den WordPress-Einstellungen api-key: "HIER_DEN_KEY_AUS_WORDPRESS_EINTRAGEN" # Name dieses Servers (muss mit dem Server-Slug in WordPress übereinstimmen) server-name: "survival" # Währungsname (muss mit WordPress-Einstellung übereinstimmen) currency-name: "$" # Wie oft (in Sekunden) nach ausstehenden Bestellungen gesucht wird check-interval: 10 # Debug-Modus (ausführliche Logs in der Konsole) debug-mode: false # Fly-Code-Einlösung auf diesem Server deaktivieren fly-redeem-disabled: false # Spieler der die Einnahmen aus dem Shop erhält (Vault-Konto) income-receiver: "" # MySQL-Verbindung (für Fly-Code-System, Rang-Sessions, Fly-Abo und Plot-Slots) mysql: host: "localhost" port: "3306" database: "minecraft" username: "root" password: "DEIN_PASSWORT" # Ankauf-Einstellungen sell: enabled: true # Preiskorrektur relativ zum WP-Ankaufspreis (in Prozent) # 0.0 = exakt WP-Preis | -10.0 = 10 % weniger | +5.0 = 5 % mehr price-offset: 0.0 # Fly-Abo-Einstellungen fly-abo: # Maximale Fly-Zeit pro Tag in Stunden (Standard: 6) max-daily-hours: 6 # Plot-Slot Einstellungen (nur Citybuild) plot-slots: # Auf welchem Server greift das Plot-Slot-System? server: "citybuild" # Standard-Plot-Slots pro LuckPerms-Gruppe rank-defaults: member: 2 vip: 3 scout: 4 primo: 5 ``` --- # 🎮 Ingame-Befehle ## Übersicht | Befehl | Beschreibung | Berechtigung | |--------|-------------|--------------| | `/abo` | Zeigt alle laufenden Abonnements in einer Übersicht | `ingameshop.abo` | ## Shop / Bestellungen | Befehl | Beschreibung | Berechtigung | |--------|-------------|--------------| | `/orders` | Zeigt deine letzten Bestellungen | `ingameshop.orders` | ## Fly-Gutscheine | Befehl | Beschreibung | Berechtigung | |--------|-------------|--------------| | `/flytime` | Zeigt deine aktive verbleibende Fly-Zeit | `ingameshop.flytime` | | `/flyredeem ` | Löst einen Fly-Gutschein-Code ein | `ingameshop.flyredeem` | | `/flycodes` | GUI mit deinen ungenutzten Fly-Codes (einlösen / weitergeben) | `ingameshop.flycodes` | | `/flygive [Label]` | Gibt einem Spieler einen Fly-Code (Admin) | `ingameshop.flygive` | | `/flypause` | Pausiert oder setzt die aktive Fly-Zeit fort | `ingameshop.flypause` | ## Fly-Abo | Befehl | Beschreibung | Berechtigung | |--------|-------------|--------------| | `/flyabo` | Zeigt Abo-Status, Ablaufdatum und heutiges Tageslimit | `ingameshop.flyabo` | | `/flyabocancel confirm` | Kündigt das Abo zum Monatsende (bleibt bis dahin aktiv) | `ingameshop.flyabocancel` | | `/flyabogive [Label]` | Vergibt ein Fly-Abo manuell (Admin) | `ingameshop.flyabogive` (OP) | ## Plot-Slots | Befehl | Beschreibung | Berechtigung | |--------|-------------|--------------| | `/plotslots` | Zeigt eigene Slot-Übersicht (Basis / Einmalig / Abo / Gesamt) | `ingameshop.plotslots` | | `/plotabo` | Zeigt Plot-Abo-Status, Slots, Preis und Ablaufdatum | `ingameshop.plotabo` | | `/plotabocancel confirm` | Kündigt das Plot-Abo zum Monatsende | `ingameshop.plotabocancel` | | `/plotabogive [Label]` | Vergibt ein Plot-Abo manuell (Admin) | `ingameshop.plotabogive` (OP) | | `/plotslotsgive [Label]` | Vergibt permanente Plot-Slots (Admin) | `ingameshop.plotslotsgive` (OP) | ## Ränge | Befehl | Beschreibung | Berechtigung | |--------|-------------|--------------| | `/rankinfo` | Zeigt deine aktiven zeitbasierten Ränge | `ingameshop.rankinfo` | ## Item-Ankauf | Befehl | Beschreibung | Berechtigung | |--------|-------------|--------------| | `/sell` | Öffnet das Ankauf-GUI mit allen ankaufbaren Items | `ingameshop.sell` | | `/sell hand` | Verkauft den Stack in der Hand direkt | `ingameshop.sell` | | `/sell all` | Verkauft alle ankaufbaren Items aus dem Inventar | `ingameshop.sell` | ### Ankauf-GUI - **Linksklick** auf ein Item → verkauft alle davon im Inventar - **Rechtsklick** auf ein Item → verkauft genau 1 Stack (max. 64) - Items werden alle 5 Minuten automatisch aus WordPress aktualisiert ## Admin | Befehl | Beschreibung | Berechtigung | |--------|-------------|--------------| | `/wpis reload` | Lädt config.yml und Ankaufliste live neu | `ingameshop.reload` (OP) | --- # ✈️ Fly-Abo-System Das Fly-Abo ermöglicht es Spielern, ein monatlich abgebuchtes Abonnement im Shop zu kaufen, das ihnen täglich eine konfigurierbare Menge an Fly-Zeit gewährt. ## Funktionsweise - Spieler kaufen das Abo einmalig im Shop – der **Artikelpreis** ist gleichzeitig der monatliche Beitrag - Das Abo ist sofort aktiv und gilt bis zum letzten Tag des laufenden Monats - Täglich stehen bis zu `max-daily-hours` Stunden Fly zur Verfügung (Standard: 6h) - Der Tagesverbrauch wird täglich zurückgesetzt - Am **1. jedes Monats** wird der Monatsbeitrag automatisch per Vault abgebucht und das Abo verlängert - Kann der Spieler nicht zahlen, wird das Abo **automatisch zum Monatsende gekündigt** - Kündigung jederzeit ingame möglich – das Abo läuft bis **Ende des laufenden Monats** weiter - Verwaltung und Kündigung erfolgen ausschließlich ingame ## BossBar Beim aktiven Fly-Abo wird eine **grüne BossBar** angezeigt: ``` ✈ Fly-Abo: 5h 30min / 6h ``` Warnungen bei: 1h, 30min, 10min, 5min, 1min, 30s, 10s verbleibend. ## Shop-Artikel anlegen (WordPress) 1. **Ingame Shop → Items → Neu** 2. Typ: **„✈ Fly-Abo (tägl. Limit)"** auswählen 3. **Preis setzen** – dieser Betrag wird monatlich per Vault abgebucht 4. Name vergeben → Speichern Die Item-ID wird automatisch als `fly_abo` gespeichert. > **Hinweis:** Es gibt nur einen Fly-Abo-Artikel. Der Preis im Shop = monatlicher Beitrag. ## Billing-Übersicht | Zeitpunkt | Was passiert | |-----------|-------------| | Kauf im Shop | Vault-Abzug, Abo sofort aktiv bis Monatsende | | 1. des Monats | Automatische Vault-Abbuchung, Abo verlängert sich | | Zahlung fehlgeschlagen | Abo läuft bis Monatsende, danach automatisch beendet | | `/flyabocancel confirm` | Kündigung vorgemerkt, Abo läuft bis Monatsende weiter | --- # 📦 Plot-Slot-System Spieler können zusätzliche Plot-Slots auf dem Citybuild-Server kaufen – entweder **einmalig permanent** oder als **monatliches Abo**. ## Standard-Limits pro Rang | Rang | Standard-Slots | |------|---------------| | Member | 2 | | VIP | 3 | | Scout | 4 | | Primo | 5 | ## Gesamtlimit-Berechnung ``` Gesamt = Rang-Basis + einmalig gekaufte Slots + Abo-Slots ``` Das Plugin setzt automatisch die LuckPerms-Permission `plots.plot.` – PlotSquared liest diese direkt aus. ## PlotSquared Voraussetzung In `plugins/PlotSquared/config/worlds.yml` muss für jede Welt gesetzt sein: ```yaml worlds: citybuild: plot: max_plots_per_player: -1 ``` ## Shop-Artikel anlegen (WordPress) **Einmaliger Kauf (permanent):** 1. Typ: **„📦 Plot-Slots (einmalig)"** auswählen 2. Anzahl der zusätzlichen Slots eingeben 3. Preis setzen → Speichern Item-ID: `plot_slots_2` (z.B. +2 Slots permanent) **Monatliches Abo:** 1. Typ: **„📦 Plot-Abo (monatlich)"** auswählen 2. Anzahl der Abo-Slots eingeben 3. Preis setzen (= monatlicher Beitrag) → Speichern Item-ID: `plot_abo_2` (z.B. +2 Slots monatlich) ## Billing-Übersicht | Zeitpunkt | Was passiert | |-----------|-------------| | Kauf im Shop | Vault-Abzug, Slots sofort aktiv, LuckPerms Permission gesetzt | | 1. des Monats | Automatische Vault-Abbuchung, Abo-Slots bleiben aktiv | | Zahlung fehlgeschlagen | Abo-Slots verfallen, überzählige Plots eingefroren | | `/plotabocancel confirm` | Kündigung vorgemerkt, läuft bis Monatsende weiter | ## Einfrieren bei Zahlungsausfall Wenn nach Zahlungsausfall der Spieler mehr Plots besitzt als das neue Limit erlaubt, werden die überzähligen Plots eingefroren (kein Bauen möglich) bis das Abo erneuert wird. --- # 📋 /abo – Abo-Übersicht Der Befehl `/abo` zeigt alle laufenden Abonnements eines Spielers in einer kompakten Übersicht: ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📋 Meine Abonnements ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✈ Fly-Abo ┌ Paket: Fly-Abo Monat ├ Preis: 50 $ / Monat ├ Status: ✔ Aktiv ├ Aktiv bis: 30.04.2026 ├ Nächste Abbuchung: 01.05.2026 ├ Heute: 1h 30min / 6h (noch: 4h 30min) └ Kündigen: /flyabocancel confirm 📦 Plot-Abo ┌ Paket: Plot-Abo +2 Slots ├ Slots: +2 Plot-Slots ├ Preis: 30 $ / Monat ├ Status: ✔ Aktiv ├ Aktiv bis: 30.04.2026 ├ Nächste Abbuchung: 01.05.2026 └ Kündigen: /plotabocancel confirm 📦 Plot-Slots ┌ Rang-Basis: 2 ├ Einmalig: +1 ├ Abo: +2 └ Gesamt: 5 Slots ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` Die Plot-Slots-Übersicht wird immer angezeigt. Hat der Spieler kein Abo, erscheint ein Hinweis mit dem Shop-Link. --- # 🖼️ Bilder-Konfiguration (Gitea Raw) ## 📂 Basis-URL für alle Item-Bilder ``` https://git.viper.ipv64.net/M_Viper/WP-Ingame-Shop-Pro/raw/branch/main/images/ ``` ### 🔧 Eintragen im Plugin **Ingame Shop → Einstellungen → Bilder Basis-URL** Eintragen: ``` https://git.viper.ipv64.net/M_Viper/WP-Ingame-Shop-Pro/raw/branch/main/images/ ``` --- ## 📌 Automatische Bildlogik Item-ID im Shop: ``` minecraft:diamond ``` Automatisch geladen wird: ``` https://git.viper.ipv64.net/M_Viper/WP-Ingame-Shop-Pro/raw/branch/main/images/minecraft_diamond.png ``` Regeln: - `:` wird zu `_` - Dateiendung = `.png` - Keine manuelle Bildzuweisung notwendig --- # 📥 Quick JSON Import (Direkt von Gitea) ## 🔗 Import-URL ``` https://git.viper.ipv64.net/M_Viper/WP-Ingame-Shop-Pro/raw/branch/main/items.json ``` --- ## 🛠️ Import durchführen 1. **Ingame Shop → JSON Tools** 2. **Import** 3. URL einfügen 4. Import starten Ideal für: - Kompletten Shop-Aufbau in Sekunden - Regelmäßige Synchronisation - Kombination mit Bulk Edit --- # 🛠️ Admin-Bereich ## 1️⃣ Einstellungen - Shop Header Text - Währungsname (z.B. Coins) - Bilder Basis-URL - Daily Deal (% Rabatt) - Gutscheine auf Sale-Items erlauben / verbieten --- ## 2️⃣ Items Verwaltung ### Einzelbearbeitung - Item ID (`minecraft:diamond`) - Typ: Minecraft Item | ✈ Fly-Gutschein | 👑 Rang (LuckPerms) | ✈ Fly-Abo | 📦 Plot-Slots (einmalig) | 📦 Plot-Abo (monatlich) - Preis - Angebotspreis - Server-Zuweisung - Kategorie - Status (`publish` / `draft`) - **Ankauf aktivieren** (mit Preismodus und Live-Vorschau) ### Ankauf-Preismodi (pro Item) | Modus | Beispiel | Ergebnis bei VK 100 | |-------|---------|---------------------| | `% vom VK` | 80 | 80 Coins | | `VK minus` | 10 | 90 Coins | | `Fixpreis` | 15 | immer 15 Coins | --- ## 🔄 Bulk Edit (Mehrfachbearbeitung) Beispiel: 100 Items auf Ankauf konfigurieren. 1. Items anhaken 2. „Massenaktionen" wählen: - Server zuweisen - Preis ändern - Angebot ändern - Kategorie setzen - Status ändern - **Ankauf konfigurieren** 3. Anwenden 4. Änderungen speichern Bei **Ankauf konfigurieren** siehst du pro Item: - Checkbox zum Aktivieren/Deaktivieren - Modus-Auswahl (%, minus, fix) - Wert-Eingabe - Live-Vorschau des Ankaufspreises --- ## 3️⃣ Weitere Bereiche ### 📦 Bestellungen - Bestellungen anzeigen - Manuell abschließen - Stornieren Status: ``` pending processing completed cancelled ``` --- ### 🌐 Server Beispiel: ``` lobby survival skyblock ``` Frontend-Filter werden automatisch generiert. --- ### 📂 Kategorien Beispiel: ``` Blöcke Waffen R�stung Ranks ``` --- ### 🎫 Gutscheine - `fixed` (Festbetrag) - `percent` (Prozent) - Ablaufdatum - Nutzungslimit - Ausschluss bei Angeboten --- ### 📊 Top Spender Automatische Auswertung der Bestellungen. --- # 🎮 Frontend Nutzung Shortcode: ``` [ingame_shop_form] ``` --- ## Spieler-Funktionen - Suche - Server-Filter - Kategorie-Tabs - Warenkorb - Gutschein-Eingabe - Server-Validierung beim Checkout --- # 📡 REST API Basis: ``` /wp-json/wis/v1/ ``` --- ## Bestellung erstellen ``` POST /wis/v1/order ``` ```json { "player": "Name", "server": "survival", "cart": [ { "id": "item_id", "quantity": 1 } ], "coupon_code": "CODE" } ``` --- ## Offene Bestellungen abrufen ``` GET /wis/v1/pending_orders?player=Name ``` --- ## Status ändern ``` POST /wis/v1/execute_order POST /wis/v1/complete_order POST /wis/v1/cancel_order ``` --- ## Gutschein validieren ``` POST /wis/v1/validate_coupon ``` --- ## Ankauf – Items abrufen ``` GET /wis/v1/sell_items?server=survival ``` Antwort: ```json { "items": [ { "item_id": "minecraft:diamond", "name": "Diamant", "buy_price": 100, "sell_price": 80 } ], "currency": "Coins" } ``` --- ## Ankauf – Item verkaufen ``` POST /wis/v1/sell_item ``` ```json { "player": "Steve", "server": "survival", "item_id": "minecraft:diamond", "quantity": 5 } ``` Antwort: ```json { "success": true, "item_name": "Diamant", "quantity": 5, "price_per_item": 80.00, "total": 400.00 } ``` --- # 💾 Datenbank-Struktur ## `wp_wis_items` | Feld | Beschreibung | |------|-------------| | item_id | minecraft:diamond | | name | Anzeigename | | price | Standardpreis | | offer_price | Angebotspreis | | is_offer | 0 / 1 | | servers | JSON Array | | categories | JSON Array | | status | publish / draft | | sell_enabled | 0 / 1 – Ankauf aktiv? | | sell_price_mode | percent / fixed / minus | | sell_price_value | Wert passend zum Modus | --- ## `wp_wis_orders` | Feld | Beschreibung | |------|-------------| | player_name | Minecraft Name | | server | Zielserver | | item_title | Zusammenfassung | | price | Gesamtpreis | | response | JSON | | status | pending / processing / completed / cancelled | --- ## `wp_wis_coupons` | Feld | Beschreibung | |------|-------------| | code | Gutschein | | type | fixed / percent | | value | Rabattwert | | usage_limit | Limit | | used_count | Nutzung | --- ## `wp_wis_sell_log` | Feld | Beschreibung | |------|-------------| | player_name | Minecraft Name | | server | Server-Slug | | item_id | minecraft:diamond | | item_name | Anzeigename | | quantity | Verkaufte Menge | | price_per_item | Ankaufspreis pro Stück | | total_paid | Ausgezahlter Gesamtbetrag | | sold_at | Zeitstempel | --- ## `wis_fly_abos` *(Spigot MySQL)* | Feld | Beschreibung | |------|-------------| | player_name | Minecraft Name | | label | Anzeigename des Pakets | | monthly_price | Monatlicher Beitrag (Vault) | | cancelled | 0 / 1 – Kündigung vorgemerkt? | | cancellation_reason | `user` oder `payment_failed` | | next_billing_date | Datum der nächsten Abbuchung (immer 1. des Monats) | | period_end | Letzter Tag der aktuellen Abo-Periode (Monatsende) | | granted_at | Aktivierungszeitpunkt | --- ## `wis_fly_abo_usage` *(Spigot MySQL)* | Feld | Beschreibung | |------|-------------| | player_name | Minecraft Name | | usage_date | Datum (täglich) | | used_sec | Verbrauchte Sekunden an diesem Tag | --- ## `wis_plot_extra_slots` *(Spigot MySQL)* | Feld | Beschreibung | |------|-------------| | player_name | Minecraft Name | | extra_slots | Dauerhaft gekaufte Zusatz-Slots | | last_perm | Zuletzt gesetzter `plots.plot.` Wert (für sauberes LP-Update) | | granted_at | Zeitstempel der letzten Vergabe | --- ## `wis_plot_abos` *(Spigot MySQL)* | Feld | Beschreibung | |------|-------------| | player_name | Minecraft Name | | label | Anzeigename des Pakets | | abo_slots | Anzahl der Abo-Slots | | monthly_price | Monatlicher Beitrag (Vault) | | cancelled | 0 / 1 – Kündigung vorgemerkt? | | cancellation_reason | `user` oder `payment_failed` | | next_billing_date | Datum der nächsten Abbuchung (immer 1. des Monats) | | period_end | Letzter Tag der aktuellen Abo-Periode (Monatsende) | | granted_at | Aktivierungszeitpunkt | --- ## `wp_wis_servers` Serverdefinitionen --- ## `wp_wis_categories` Kategoriedefinitionen --- # ⚡ Performance Empfehlung Bei 1500+ PNG-Dateien: - CDN empfohlen - PNG verlustfrei komprimieren - Gitea Caching aktivieren - Optional WebP-Versionen erstellen --- # 🗿 ArmorStand-Editor (SurvivalPlus) ## Übersicht Der ArmorStand-Editor ermöglicht das vollständige Bearbeiten von ArmorStands direkt ingame – ohne externe Tools. | Aktion | Beschreibung | |--------|-------------| | **Shift+Rechtsklick** auf einen ArmorStand | Editor öffnen | | **Rechtsklick** auf einen ArmorStand | Hinterlegten BungeeCord-Command / Server-Switch ausführen | | **Shift+Linksklick** auf einen ArmorStand | ArmorStand löschen | **Benötigte Permissions:** | Permission | Beschreibung | Standard | |------------|-------------|---------| | `survivalplus.armorstand.edit` | Editor öffnen, Ausrüstung & Pose bearbeiten | op | | `survivalplus.armorstand.destroy` | ArmorStand per Shift+Linksklick löschen | op | --- ## Haupt-GUI Öffnet sich per Shift+Rechtsklick oder `/asedit`. | Slot | Funktion | |------|---------| | Sichtbarkeit | Sichtbar / Unsichtbar umschalten | | Arme | Arme ein-/ausblenden | | Basisplatte | Basisplatte ein-/ausblenden | | Schwerkraft | Schwerkraft ein-/ausschalten | | Größe | Normal / Klein umschalten | | Unverletzlichkeit | Unverletzlich / Verletzlich umschalten | | Namens-Anzeige | Customname ein-/ausblenden | | Namen setzen | Namen per Chat eingeben (Farbcodes mit `&` möglich, `remove` zum Löschen) | | Kopf / Körper / Arme / Beine | Pose-Sub-GUI öffnen | | **Ausrüstung** | Ausrüstungs-GUI öffnen | | **BungeeCord-Command** | BungeeCord-GUI öffnen | | Pose zurücksetzen | Alle Winkel auf 0° setzen | | Editor schließen | GUI schließen | --- ## Ausrüstungs-GUI Öffnet sich über „Ausrüstung" im Haupt-GUI. **Items setzen:** - **Shift-Klick** auf ein Item im eigenen Inventar → wird automatisch in den richtigen Slot gesetzt (Helm, Brust, Beine, Schuhe, Mainhand) - **Item auf Cursor nehmen** (normaler Klick im Inventar) und dann auf einen Ausrüstungs-Slot klicken → setzt das Item; altes Item kommt auf den Cursor zurück **Items entfernen:** - Auf einen besetzten Slot klicken **ohne** Cursor-Item → Item geht zurück ins Inventar | Slot | Ausrüstungsplatz | |------|----------------| | 10 | Helm | | 12 | Brustteil | | 14 | Beinteil | | 16 | Schuhe | | 11 | Mainhand | | 13 | Offhand | **Automatische Slot-Erkennung beim Shift-Klick:** | Item-Typ | Ziel-Slot | |----------|----------| | `*_HELMET`, `*_SKULL`, `*_HEAD`, Kürbis, Spielerkopf | Helm | | `*_CHESTPLATE`, Elytra | Brust | | `*_LEGGINGS` | Beine | | `*_BOOTS` | Schuhe | | Alles andere | Mainhand | --- ## Pose-GUI Öffnet sich für Kopf, Körper, linken Arm, rechten Arm, linkes Bein oder rechtes Bein. - Rotation auf **X-, Y- und Z-Achse** je in Schritten von **±5°** (fein) oder **±15°** (grob) - Aktueller Winkel wird live angezeigt - Zurück-Pfeil → Haupt-GUI --- ## BungeeCord-Command-GUI Öffnet sich über „BungeeCord-Command" im Haupt-GUI. | Option | Beschreibung | |--------|-------------| | **Server-Switch** | Spieler wird beim Rechtsklick auf den Stand zu einem anderen BungeeCord-Server weitergeleitet. Server-Namen im Chat eingeben (z.B. `lobby`). | | **Command ausführen** | Führt beim Rechtsklick einen Befehl als Spieler aus. Befehl **ohne** `/` im Chat eingeben (z.B. `spawn`). | | **Entfernen** | Löscht den hinterlegten Command/Server-Switch. | > Mit `cancel` im Chat wird die Eingabe abgebrochen. > > Server-Switch und Command schließen sich gegenseitig aus – es kann nur eines aktiv sein. Commands und Server-Switch-Daten werden im **Persistent Data Container (PDC)** des ArmorStands gespeichert und überleben Server-Neustarts. --- ## Befehle | Befehl | Beschreibung | Permission | |--------|-------------|------------| | `/asedit` | Öffnet den Editor für den nächsten ArmorStand (≤ 5 Blöcke) | `survivalplus.armorstand.edit` | | `/ascommand` | Alias für `/asedit` | `survivalplus.armorstand.edit` | | `/showarmorstands [Radius]` | Macht unsichtbare ArmorStands sichtbar | `survivalplus.showarmorstands` | | `/cleardebugarmorstands` | Entfernt alle Debug-ArmorStands | `survivalplus.cleardebugarmorstands` | --- # 🔐 Sicherheitshinweis Aktuell sind API-Endpunkte öffentlich (`__return_true`). Für Produktion empfohlen: - API-Key Header - Bearer Token - IP Whitelisting - Nonce/Signature System --- **Copyright © 2026 - M_Viper - Alle Rechte vorbehalten** Die unbefugte Vervielfältigung, Verbreitung oder Weitergabe dieses Plugins ist strafbar und wird rechtlich verfolgt.