RuinsCore ist ein modular aufgebautes Paper-Plugin (1.21.4) mit dynamischem Laden von Commands und Listenern, SQLite-Backend und einem erweiterten Jobsystem mit GUI-Verwaltung.
- 🏢 Modulsystem: Modulare Architektur mit Lifecycle-Management
- 💼 Jobsystem: Umfassendes Job-Management mit GUI, Leaders und Extra-Herzen
- 💰 Geldsystem: Vollständiges Economy-System mit Transaktionen und Anfragen
- 🔒 Vanish System: Spieler-Invisibility mit persistentem Status
- ⚡ Essentials Commands: Beliebte Admin-Commands (Gamemode, Fly, Speed, Vanish, etc.)
- 💬 Private Nachrichten: Mit Admin-Spy Feature
- 📊 SQLite Datenbank: Persistente Speicherung aller Daten
- 🔌 Dynamisches Laden: Commands und Listener werden automatisch geladen
- 🔐 Permission-System: Granulare Kontrolle über alle Features
- 🎂 Auktionssystem: Spieler können Items kaufen und verkaufen
- 👰 Marry System: Spieler können verheiratet werden mit Partner-Anzeige
- 📋 Report System: Spieler-Meldungen für Supporter-Verwaltung
- 🚪 Door Lock System: Türen mit Whitelist-Verwaltung
- ✨ Pentagram System: Visuelle Feuer-Effekte
- Modulsystem mit Lifecycle über
ModuleManagerundPluginModule - Dynamischer Command-Loader aus
loader.command-package(Reflection + Auto-Registrierung) - Dynamischer Event-Loader aus
loader.listener-package - SQLite-Datenhaltung über
DatabaseManager(lokale Datei im Plugin-Datenordner) - Utility-Layer für Logging (
LoggerUtil) und Staff-Benachrichtigungen (StaffAlertUtil) - Permission-Handling mit
PermissionNode-Enum +PermissionManager
| System | Package | Features |
|---|---|---|
| Report System | de.satsuya.ruinsCore.core.report |
Spieler-Meldungen, Supporter-GUI, Verwaltung |
| Door Lock System | de.satsuya.ruinsCore.core.turlock |
Tür-Sperren, Whitelist, Admin-Management |
| Pentagram System | de.satsuya.ruinsCore.core.pentagram |
Feuer-Effekte, 10s Animation |
ReportService- Datenbank-VerwaltungReportGuiService- GUI-ErstellungReportGuiListener- Event-HandlingReportCommand- Command-LogikReportGuiHolder- InventoryHolder
DoorLockService- Core-LogikDoorLockGuiService- GUI-ManagementDoorLockListener- Shift+Rechtsklick HandlerDoorLockGuiListener- GUI Click HandlerDoorLockGuiHolder- Hauptmenü InventoryHolderDoorLockWhitelistGuiHolder- Whitelist InventoryHolder
PentagramService- Partikel-LogikPentagramCommand- Command
- Dynamische Commands mit Tab-Completion (
CoreCommand) - Dynamische Listener-Registrierung beim Start
- Persistenz für Jobs und Job-Leader in SQLite
- Health-Sync-Service für Job-basierte Extra-Herzen
/job unterstützt:
assign,remove,listleader add|remove|listgui(Übersicht -> Mitglieder -> User hinzufügen/entfernen)
Leader können das GUI ebenfalls nutzen, aber nur für ihre eigenen Jobs. Admins mit ruinscore.job.manage oder ruinscore.job.gui sehen alle Jobs.
holzfaeller: Nur Holzfäller/Builder dürfen Holz normal abbauen; andere bekommen Lähmung + ggf. Planken-Dropminer: Nur Miner/Builder dürfen Erze abbauenbuilder: Umgeht Holz-/Erz-Restriktionenfischer: Nicht-Fischer erhalten beim Angeln keinen Epic-Loot (wird auf Fisch ersetzt)bauer: Nur Bauer dürfen essensrelevante Pflanzen anbauen/abbauen und essbare Items craftenschmied: Nur Schmiede dürfen definierte Rüstung/Werkzeuge craften, upgraden und reparierenlehrer: Stock-Schaden-Multiplikatorbannerrist: Nur Bannerristen dürfen Banner craften und am Webstuhl bearbeitenwache: Durchsuchen/Festhalten per Stock auf Spieler (inkl. Slowness-Festhalten)berater: Chat-Nachrichten mit!werden als Server-Ankündigung gesendetschankwirt: Nur Schankwirte dürfen den Braustand nutzenverzauberer: Nur Verzauberer dürfen Zaubertisch und Amboss nutzenleutnant,ritter,sensenmann,prinz_prinzessin: Extra-Herzen via Health-Sync
/ping/staffalert(/sa)/job/money- Zeige dein Guthaben an/money set <Spieler> <Betrag>(Admin) - Setze das Guthaben eines Spielers/money add <Spieler> <Betrag>(Admin) - Addiere Geld zu einem Spieler/money remove <Spieler> <Betrag>(Admin) - Entnehme Geld von einem Spieler/money info <Spieler>(Admin) - Zeige detaillierte Guthaben-Informationen/pay <Spieler> <Betrag>- Sende Geld an einen anderen Spieler/request <Spieler> <Betrag>- Fordere Geld von einem Spieler an/requests [accept|decline <ID>]- Verwalte deine ausstehenden Geldanfragen/sudo <Spieler> <Command...>(Admin) - Führe Command als anderer Spieler aus/gm [Gamemode/Spieler] [Gamemode](Admin) - Ändere den Gamemode/fly [Spieler](Admin) - Aktiviere/Deaktiviere Flug/speed <Geschwindigkeit> [Spieler](Admin) - Ändere Bewegungsgeschwindigkeit/flyspeed <Geschwindigkeit> [Spieler](Admin) - Ändere nur die Flug-Geschwindigkeit/resetallspeeds [Spieler](Admin) - Setze alle Geschwindigkeiten zurück/vanish [Spieler](Admin) - Mache dich oder andere unsichtbar/fireball [Geschwindigkeit](Admin) - Werfe einen Feuerball/smite <Spieler>(Admin) - Schlage Spieler mit Blitz/msg <Spieler> <Nachricht...>- Sende private Nachricht/supportmode(Supporter) - Aktiviere Support Mode mit Godmode und Glow/bc chat <Nachricht...>(Admin) - Sende Chat-Broadcast/bc display <Nachricht...>(Admin) - Sende roten Title-Broadcast/freeze <Spieler>(Admin) - Friere Spieler ein/auf/invsee <Spieler>(Admin) - Schau Spieler-Inventar an (Live-Sync)/endersee <Spieler>(Admin) - Schau Spieler-Ender-Chest an (Live-Sync)/warn <Spieler> <Grund...>(Admin) - Verwarnt einen Spieler/warns <Spieler>(Admin) - Zeige Verwarnungen eines Spielers/size <Größe>- Ändere deine Spielergröße (0.6 - 1.1)/size <Spieler> <Größe>(Admin) - Ändere Spielergröße/msg(Spy - Admin) - Sehe private Nachrichten anderer/marry marry <Spieler1> <Spieler2>(Admin) - Verheirate zwei Spieler/marry divorce <Spieler>(Admin) - Scheiden/marry info <Spieler>(Admin) - Zeige Ehe-Information/playtime- Zeige deine Spielzeit an/playtime <Spieler>(Admin) - Zeige Spielzeit eines anderen Spielers/report <Spieler> <Grund...>- Melde einen Spieler/report gui(Supporter) - Öffne Report-Verwaltungs-GUI/pentagram(Admin) - Erstelle ein Feuer-Pentagramm
Aus plugin.yml:
ruinscore.command.pingruinscore.command.staffalertruinscore.command.moneyruinscore.command.money.admin(set, add, remove, info)ruinscore.command.payruinscore.command.requestruinscore.command.sudo(execute commands as other players)ruinscore.command.gamemode(change gamemode)ruinscore.command.fly(enable/disable flight)ruinscore.command.speed(change movement speed)ruinscore.command.flyspeed(change flight speed only)ruinscore.command.resetallspeeds(reset all player speeds)ruinscore.command.vanish(become invisible)ruinscore.command.fireball(throw fireballs)ruinscore.command.smite(strike players with lightning)ruinscore.command.msg(send private messages)ruinscore.command.msg.spy(see private messages of others)ruinscore.command.supportmode(support mode with godmode and glow)ruinscore.command.broadcast(broadcast messages to all players)ruinscore.command.freeze(freeze/unfreeze players)ruinscore.command.invsee(view player inventories with live-sync)ruinscore.command.endersee(view player ender chests with live-sync)ruinscore.chat.bypass(see and send all chat messages without radius limit)ruinscore.command.warn(warn players)ruinscore.command.warns(view player warnings)ruinscore.command.size(change own player size)ruinscore.command.size.other(change other player sizes)ruinscore.job.manageruinscore.job.guiruinscore.staff.alert.sendruinscore.staff.alert.receiveruinscore.auction.use(use auction system)ruinscore.command.marry(marry/divorce/info players)ruinscore.command.playtime(view own playtime)ruinscore.command.playtime.other(view other player playtimes)ruinscore.command.report.use(use report system)ruinscore.command.report.view(view reports via GUI)ruinscore.command.pentagram(create pentagrams)ruinscore.command.turlock.admin(manage all door locks)
Das Geldsystem erlaubt Spielern, Guthaben zu haben und zwischen Spielern zu transferieren.
- Guthaben verwalten: Jeder Spieler hat ein eigenes Geldkonto (wird beim Spieler-Login initialisiert)
- Direkte Transfers: Mit
/pay <Spieler> <Betrag>kann Geld direkt gesendet werden - Geldanfragen: Mit
/request <Spieler> <Betrag>kann Geld angefordert werden - Anfrage-Verwaltung: Mit
/requestskönnen Anfragen akzeptiert oder abgelehnt werden - Formatierte Anzeige: Alle Beträge werden im Format "X.XXX €" angezeigt
- Admin-Verwaltung: Admins mit
ruinscore.command.money.adminkönnen:/money set <Spieler> <Betrag>- Guthaben direkt setzen/money add <Spieler> <Betrag>- Geld hinzufügen/money remove <Spieler> <Betrag>- Geld entnehmen/money info <Spieler>- Detaillierte Spieler-Informationen anzeigen
Neue Tabellen:
player_economy- Speichert das Guthaben jedes Spielersmoney_requests- Speichert ausstehende, akzeptierte und abgelehnte Geldanfragen
EconomyService- Core-Logik für Guthaben (get, set, add, remove)MoneyTransactionService- Verwaltung von Geldanfragen (create, accept, decline)EconomyJoinListener- Initialisiert Konten beim Login- Commands:
MoneyCommand,PayCommand,RequestCommand,RequestsCommand
Das Playtime Tracking System verfolgt die Spielzeit jedes Spielers:
- Automatisches Tracking: Spielzeit wird beim Login/Logout automatisch gemessen
- Persistente Speicherung: Alle Spielzeiten werden in SQLite gespeichert
- Formatierte Ausgabe: Spielzeit in Tagen, Stunden, Minuten anzeigen
- Permission System: Eigene Spielzeit sichtbar, andere Spielzeiten mit Permission
- Zeige deine eigene Spielzeit an
- Beispiel:
/playtime - Require:
ruinscore.command.playtime
- Zeige die Spielzeit eines anderen Spielers
- Beispiel:
/playtime Alice - Require:
ruinscore.command.playtime.other
Die Spielzeit wird so angezeigt:
- Mit vielen Tagen:
5 Tage, 12 Stunden, 30 Minuten - Mit Stunden:
15 Stunden, 45 Minuten - Mit Minuten:
45 Minuten, 30 Sekunden - Nur Sekunden:
120 Sekunden
PlaytimeService- Core-Logik (Tracking, Speicherung, Formatierung)PlaytimeListener- Event-Handler für Login/Quit- Command:
PlaytimeCommand - Datenbank-Tabelle:
player_playtime
Tabelle: player_playtime
player_uuid- UUID des Spielers (Primary Key)playtime_millis- Gesamte Spielzeit in Millisekunden
Das Welcome System begrüßt neue Spieler mit einer detaillierten Welcome Message:
- Automatische Erkennung: Neue Spieler werden automatisch erkannt
- Schöne Willkommens-Nachricht: Eine formatierte Nachricht mit Tipps
- Server-Broadcast: Alle Spieler werden über den neuen Spieler benachrichtigt
- Persistente Speicherung: Neue Spieler werden in der DB markiert
- Nur einmal pro Spieler: Die Welcome Message wird nur beim ersten Login gezeigt
Die Welcome Message zeigt:
- Große Willkommens-ASCII-Box
- Personalisierte Begrüßung mit Spielernamen
- Wichtige Commands (
.job,/money,/playtime,/help) - Informationen über Berufe
- Info über die Wirtschaft und Auktionen
- Wie man Hilfe bekommt
Alle Online-Spieler sehen:
✨ Alice hat den Server zum ersten Mal betreten! Willkommen! 🎉 ✨
WelcomeService- Verwaltung von Welcome MessagesWelcomeListener- Listener für PlayerJoinEvent- Datenbank-Tabelle:
player_welcome
Tabelle: player_welcome
player_uuid- UUID des Spielers (Primary Key)player_name- Name des Spielersfirst_join- Timestamp des ersten Logins
Das Marry System erlaubt Admins, zwei Spieler zu verheiraten und zeigt den Partner im Scoreboard und der Tablist an:
- Verheiratung: Admin kann zwei Spieler verheiraten
- Scheidung: Spieler können geschieden werden
- Partner-Info: Partner wird im Scoreboard und im Tablist Footer angezeigt
- Persistenz: Ehestatus wird in der Datenbank gespeichert
- Auto-Laden: Alle Ehen werden beim Start aus der DB geladen
- Live-Updates: Scoreboard aktualisiert sich automatisch
- Verheirate zwei Spieler
- Beide Spieler müssen online sein
- Spieler dürfen nicht bereits verheiratet sein
- Beispiel:
/marry marry Alice Bob - Require:
ruinscore.command.marry
- Trenne ein Ehepaar
- Beispiel:
/marry divorce Alice - Require:
ruinscore.command.marry
- Zeige Informationen über die Ehe eines Spielers
- Beispiel:
/marry info Alice - Require:
ruinscore.command.marry
Das Scoreboard zeigt den Partner eines verheirateten Spielers an:
◆ RuinsCore ◆
────────────────
Job: Schmied
Geld: 1234.50€
Partner: 💕 Bob
────────────────
Uhrzeit: 15:30:45
Ping: 45ms
Der Partner wird auch im Tablist Footer angezeigt:
═══════════════════════════════════
Willkommen auf RuinsCore Server
═══════════════════════════════════
───────────────────────────────────
Job: Schmied │ Geld: 1234.50€
Partner: 💕 Bob
───────────────────────────────────
MarryService- Core-Logik (verheiraten, scheiden, Partner laden)- Command:
MarryCommand - Datenbank-Tabelle:
player_marriages(speichert Paare) - Datenbank-Tabelle:
player_marriages_names(speichert Partner-Namen offline) - Integration in
ScoreboardServicefür Anzeige
Tabelle: player_marriages
player1_uuid- UUID des ersten Partnersplayer2_uuid- UUID des zweiten Partnersmarried_at- Hochzeitsdatum
Tabelle: player_marriages_names
player_uuid- UUID des Spielersplayer_name- Name des Partners (für Offline-Anzeige)
✅ Beide Spieler müssen online sein zum Verheiraten ✅ Spieler dürfen nicht bereits verheiratet sein ✅ Partner-Namen werden für Offline-Anzeige gespeichert ✅ Automatisches Laden aus DB beim Start
Das Plugin implementiert beliebte Commands aus dem Essentials Plugin:
- Führt einen Command als anderer Spieler aus
- Beispiel:
/sudo JibrilPlayer say Hallo zusammen! - Require:
ruinscore.command.sudo
- Ändert den Gamemode
- Argumente:
survival,creative,adventure,spectatoroder Abkürzungen (s,c,a,sp) - Ohne Argumente: Durchschalten zwischen Gamemodes
- Beispiele:
/gm creative- Wechsle zu Creative/gm JibrilPlayer survival- Setze Spieler auf Survival
- Require:
ruinscore.command.gamemode
- Aktiviert/Deaktiviert Flug-Modus
- Beispiel:
/fly JibrilPlayer - Require:
ruinscore.command.fly
- Ändert die Bewegungsgeschwindigkeit (0.1 - 10.0)
- Standard: 1.0
- Beispiel:
/speed 2.0- Doppelte Geschwindigkeit - Require:
ruinscore.command.speed
- Ändert NUR die Flug-Geschwindigkeit (0.1 - 10.0)
- Standard: 1.0
- Beispiel:
/flyspeed 3.0- Schneller fliegen - Require:
ruinscore.command.flyspeed
- Setzt alle Geschwindigkeiten auf Standard zurück
- Ohne Argument: Alle Spieler zurücksetzen
- Mit Argument: Nur einen Spieler zurücksetzen
- Beispiel:
/resetallspeedsoder/resetallspeeds JibrilPlayer - Require:
ruinscore.command.resetallspeeds
- Macht den Spieler unsichtbar/sichtbar (offline für andere)
- Neu joinende Spieler sehen vanished Spieler nicht
- Beispiel:
/vanish JibrilPlayer - Require:
ruinscore.command.vanish
- Wirft einen Feuerball in die Blickrichtung
- Geschwindigkeit: 0.5 - 10.0 (Standard: 2.0)
- Beispiel:
/fireball 5.0- Schneller Feuerball - Require:
ruinscore.command.fireball
- Schlägt einen Spieler mit einem Blitz
- Verursacht Schaden
- Beispiel:
/smite JibrilPlayer - Require:
ruinscore.command.smite
- Sendet eine private Nachricht an einen Spieler
- Admins mit
ruinscore.command.msg.spykönnen alle privaten Nachrichten sehen - Beispiel:
/msg JibrilPlayer Hallo, wie geht's? - Require:
ruinscore.command.msg - Admin Spy:
ruinscore.command.msg.spy
Das Support Mode System gibt Supportern spezielle Fähigkeiten zur Moderation:
- Aktiviert/Deaktiviert Support Mode
- Features beim Aktivieren:
- ✓ Godmode (Invulnerability + Resistance)
- ✓ Fly (Flug aktiviert)
- ✓ Glow-Effekt (weiß)
- ✓ Automatische Benachrichtigungen
- Deaktivierung: Alle Effekte werden entfernt (nochmal
/supportmodeausführen) - Auto-Cleanup: Beim Disconnect werden alle Effekte automatisch entfernt
- Beispiel:
/supportmode- Aktivieren/Deaktivieren - Require:
ruinscore.command.supportmode
- Godmode: Spieler kann nicht getötet werden (Invulnerability + Resistance Effect)
- Fly: Spieler kann frei fliegen
- Glow: Spieler leuchtet weiß auf für bessere Sichtbarkeit
- State Restoration: Ursprüngliche Zustände werden beim Deaktivieren wiederhergestellt
- Auto-Cleanup: Alle Effects werden entfernt beim:
- Disconnect des Spielers
- Plugin Disable
- Manuelles Deaktivieren (erneut
/supportmodeausführen)
SupportModeService- Zentrale Verwaltung von Support ModesSupportModeListener- Cleanup bei Player Quit- Command:
SupportModeCommand
Das Broadcast System erlaubt Admins, wichtige Nachrichten an alle Spieler zu senden:
- Sendet eine Chat-Nachricht an alle Online-Spieler
- Format:
[BROADCAST] Nachricht - Gelb-formatiert für bessere Sichtbarkeit
- Beispiel:
/bc chat Wartungsarbeiten in 5 Minuten! - Require:
ruinscore.command.broadcast
- Sendet eine rote Titel-Nachricht an alle Spieler
- Nutzt den
/titleCommand - Großformat auf dem Bildschirm
- Rot gefärbt für Aufmerksamkeit
- Beispiel:
/bc display Server wird neu gestartet! - Require:
ruinscore.command.broadcast
- Command:
BroadcastCommand - Zwei Modi:
chat(Chat-Nachricht) unddisplay(Title-Nachricht)
Das Freeze System erlaubt Admins, Spieler einzufrieren (bewegungslos machen):
- Friere einen Spieler ein / Taue ihn auf (Toggle)
- Features beim Einfrieren:
- ✓ Spieler kann sich nicht bewegen
- ✓ Slowness Level 255 (komplette Bewegungsblockierung)
- ✓ Jede Bewegung wird blockiert
- Automatische Benachrichtigung: Spieler sieht Nachricht beim Einfrieren/Auftauen
- Beispiel:
/freeze JibrilPlayer- Einfrieren/Auftauen Toggle - Require:
ruinscore.command.freeze
FreezeService- Verwaltung gefrorener SpielerFreezeInvseeListener- Verhindert Bewegung gefrorener Spieler- Command:
FreezeCommand
Das Invsee System erlaubt Admins, das Inventar von Spielern anzuschauen mit Live-Sync:
- Öffne das Inventar eines anderen Spielers
- Features:
- ✓ Live-Sync: Änderungen werden sofort synchronisiert
- ✓ Keine Duplikate: Bukkit handhabt Sync automatisch
- ✓ Geschlossenes Inventar wird tracked
- ✓ Auto-Cleanup beim Schließen
- Duplikat-Schutz:
- Bukkit synchronisiert Inventar-Änderungen automatisch
- Items werden nicht geduped
- Änderungen sind bidirektional
- Beispiel:
/invsee JibrilPlayer- Öffne sein Inventar - Require:
ruinscore.command.invsee
InvseeService- Verwaltung offener InventareFreezeInvseeListener- Live-Sync und Auto-Cleanup- Command:
InvseeCommand
Das Endersee System erlaubt Admins, den Ender-Chest von Spielern anzuschauen mit Live-Sync:
- Öffne den Ender-Chest eines anderen Spielers
- Features:
- ✓ Live-Sync: Änderungen werden sofort synchronisiert
- ✓ Keine Duplikate: Bukkit handhabt Sync automatisch
- ✓ Geschlossener Ender-Chest wird tracked
- ✓ Auto-Cleanup beim Schließen
- Duplikat-Schutz:
- Bukkit synchronisiert Ender-Chest Änderungen automatisch
- Items werden nicht geduped
- Änderungen sind bidirektional
- Beispiel:
/endersee JibrilPlayer- Öffne seinen Ender-Chest - Require:
ruinscore.command.endersee
EnderseeService- Verwaltung offener Ender-ChestsFreezeInvseeListener- Live-Sync und Auto-Cleanup (auch für Endersee)- Command:
EnderseeCommand
Das Chat-Radius System begrenzt sichtbare Chat-Nachrichten basierend auf Entfernung:
- Radius-Limitierung: Nur Spieler im konfigurierten Radius (Standard: 30 Blöcke) sehen Nachrichten
- Normale Nachrichten: Chat-Format wird NICHT geändert
- Konfigurierbar: Ein/Aus und Radius-Wert in der Config änderbar
- Bypass Permission: Admins mit
ruinscore.chat.bypasssehen alle Nachrichten - Welt-Grenzen: Spieler in anderen Welten sehen keine Nachrichten
chat:
enabled: true # Chat-Radius aktivieren (true/false)
radius: 30 # Radius in Blöcken-
Mit Radius (enabled: true):
- Spieler A schreibt in 5 Blöcken: Spieler B sieht es
- Spieler C in 35 Blöcken: Sieht die Nachricht nicht
-
Ohne Radius (enabled: false):
- Alle Spieler sehen alle Nachrichten
-
Mit Bypass Permission (ruinscore.chat.bypass):
- Admin sieht alle Nachrichten überall
- Admin kann überall schreiben, alle Spieler sehen es
ChatRadiusService- Radius-LogikChatRadiusListener- AsyncPlayerChatEvent Handler- Permission:
ruinscore.chat.bypass
Das Warning System verwaltet Spieler-Verwarnungen mit automatischem Ban nach 5 Verwarnungen:
- Verwarnungs-Tracking: Jede Verwarnung wird gespeichert mit Admin-Name und Grund
- Automatischer Ban: Nach 5 Verwarnungen wird der Spieler automatisch ge-kickt
- Verwarnungs-Info: Zeige Verwarnungen mit verbleibenden Verwarnungen
- Datenbank-Persistenz: Alle Verwarnungen werden in SQLite gespeichert
- Verwarnt einen Spieler
- Speichert Grund und Admin-Name
- Zeigt aktuelle Verwarnungsanzahl
- Automatisch Ban nach 5 Verwarnungen
- Beispiel:
/warn JibrilPlayer Spam
- Zeigt Verwarnungsinfo eines Spielers
- Zeigt aktuelle Verwarnungen/5
- Zeigt verbleibende Verwarnungen
- Beispiel:
/warns JibrilPlayer
- Admin gibt
/warn Spieler Grundein - Verwarn wird in Datenbank gespeichert
- Spieler sieht Nachricht mit aktuellen Verwarnungen
- Nach 5 Verwarnungen: Spieler wird automatisch gekickt
- Admin kann
/warns Spielerchecken
- Verwarnung 1/5:
/warn Player Spam→ Player hat 1/5 (4 verbleibend) - Verwarnung 2/5:
/warn Player Beleidigung→ Player hat 2/5 (3 verbleibend) - ...
- Verwarnung 5/5:
/warn Player Hack→ Player wird automatisch gekickt
WarningService- Verwaltung von Verwarnungen- Commands:
WarnCommand,WarnsCommand - Datenbank-Tabelle:
player_warnings
Das Size Command System erlaubt Spielern, ihre Größe zu ändern (0.6 - 1.1):
- Ändere deine eigene Spielergröße
- Größenbereich: 0.6 - 1.1
- Beispiele:
/size 0.6- Klein/size 0.8- Etwas kleiner/size 1.0- Normal/size 1.1- Groß
- Require:
ruinscore.command.size
- Ändere die Größe eines anderen Spielers
- Größenbereich: 0.6 - 1.1
- Beispiel:
/size JibrilPlayer 0.6 - Require:
ruinscore.command.size.other
✅ Größenbereich: 0.6 (klein) bis 1.1 (groß) ✅ Validierung: Größe wird überprüft ✅ Tab-Completion: Vordefinierte Größen ✅ Zwei Permissions: Eine für sich selbst, eine für andere ✅ Benachrichtigungen: Spieler wird informiert
- Command:
SizeCommand - Nutzt
player.setScale() - Permissions:
ruinscore.command.sizeundruinscore.command.size.other
Das Auktionssystem erlaubt Spielern, Items zu verkaufen und zu kaufen:
- Auktionen erstellen: Spieler können Items mit Preis-GUI auktionieren
- Auktionen kaufen: Spieler können Items von anderen Spielern kaufen
- Preis-GUI: Intuitive GUI mit +1, +5, +10 und -1, -5, -10 Buttons
- Rückgabe von eigenen Items: Spieler können ihre eigenen Auktionen zurückholen
- Geldsystem-Integration: Automatischer Geldtransfer beim Kauf
- Datenbank-Persistenz: Alle Auktionen werden gespeichert
- Gültigkeitsdauer: Auktionen laufen 7 Tage (automatische Löschung abgelaufener Items)
- Öffne die Auktionsübersicht
- Zeigt alle aktiven Auktionen auf mehreren Seiten
- Klick auf Items zum Kaufen oder auf deine Auktionen zum Zurückholen
- Require:
ruinscore.auction.use
- Schritt 1: Spieler gibt
/auctionein - Schritt 2: Klick auf "§a+ Neue Auktion"
- Schritt 3: Klick auf ein Item im Inventar des Spielers
- Item wird als Kopie auf die Glasscheibe "gezogen"
- Schritt 4: Klick auf "§a✓ Auktion erstellen"
- Schritt 5: Preis-GUI öffnet sich
- Aktuelle Preis-Anzeige: Aktueller Preis: 0.00€
- Minus-Buttons: -10€, -5€, -1€ (rot/orange/gelb)
- Plus-Buttons: +1€, +5€, +10€ (grün/dunkelgrün)
- Buttons: ✓ Auktion erstellen, ✗ Abbrechen
- Schritt 6: Spieler stellt Preis ein und klickt "✓ Auktion erstellen"
- Original-Item wird aus Inventar entfernt
- Auktion wird erstellt
- Spieler sieht Bestätigungsmeldung
- GUI schließt sich automatisch
- Schritt 1: Spieler gibt
/auctionein - Schritt 2: Sieht die Auktionsübersicht mit allen Items
- Jedes Item zeigt: Verkäufer, Preis
- Schritt 3: Spieler klickt auf ein fremdes Item
- Geld wird abgezogen (wenn vorhanden)
- Geld wird zum Verkäufer addiert
- Item landet im Inventar
- Auktion wird gelöscht
- Verkäufer wird benachrichtigt (wenn online)
- Schritt 1: Spieler gibt
/auctionein - Schritt 2: Sieht die Auktionsübersicht
- Schritt 3: Spieler klickt auf sein eigenes Auktions-Item
- Item wird sofort ins Inventar zurückgelegt
- Auktion wird gelöscht
- Spieler sieht Bestätigungsmeldung: "§aAuktion beendet! X Item wurde zurück ins Inventar gelegt."
- Slot 13: Item-Vorschau (links, nicht anklickbar)
- Slots 2-7 (Reihe 1): Preis-Buttons
- Slot 2: -10€ (Rot)
- Slot 3: -5€ (Orange)
- Slot 4: -1€ (Gelb)
- Slot 5: +1€ (Lime)
- Slot 6: +5€ (Grün)
- Slot 7: +10€ (Dunkelgrün)
- Slot 31: Preis-Display mit aktuellem Wert
- Slot 33: ✓ Auktion erstellen (Bestätigung)
- Slot 34: ✗ Abbrechen
- Slot 13: Glasscheibe (Zielplatz) - nicht anklickbar
- Spieler-Inventar: Klick auf Items zum Auswählen
- Slot 20: ✗ Abbrechen
- Slot 24: ✓ Auktion erstellen
- Slots 0-44: Auktions-Items (max. 45 pro Seite)
- Slot 45: ← Zurück (wenn nicht auf Seite 1)
- Slot 49: + Neue Auktion
- Slot 53: Weiter → (wenn nicht auf letzter Seite)
- Seiten-Navigation: Automatisch berechnet
AuctionService- Core-Logik (erstellen, löschen, abrufen)AuctionGuiService- GUI-Verwaltung (Übersicht, Erstellung, Preis)AuctionListener- Event-Handler für GUI-InteraktionenAuctionCreateGuiHolder- InventoryHolder für Item-AuswahlAuctionPriceGuiHolder- InventoryHolder für Preis-GUIAuctionOverviewGuiHolder- InventoryHolder für Auktionsübersicht- Command:
AuctionCommand - Datenbank-Tabelle:
auctions
Tabelle: auctions
id- Eindeutige IDseller_uuid- UUID des Verkäufersseller_name- Name des Verkäufersitem_data- Serialisierte Item-Daten (Base64)price- Auktionspreiscreated_at- Erstellungszeitstempelexpires_at- Ablaufzeitstempel (7 Tage)
✅ Spieler muss Geld haben zum Kaufen ✅ Preis muss > 0€ sein ✅ Item muss ausgewählt sein ✅ Spieler kann eigene Items nicht kaufen (sondern nur zurückholen) ✅ Abgelaufene Auktionen werden nicht mehr angezeigt ✅ Maximale Item-Menge wird respektiert
Aktuell fest im Code:
- Auktionsgültigkeitsdauer: 7 Tage
- Maximale Auktionen pro Seite: 45 Items
- Preis-Buttons: ±1€, ±5€, ±10€
Datei: src/main/resources/config.yml
Wichtige Bereiche:
database.file-> SQLite-Dateiname (im Plugin-Datenordner)loader.command-package-> Package für dynamische Commandsloader.listener-package-> Package für dynamische Listeneralerts.prefix-> Prefix für Staff-Alertsjobs.*-> Job-Regeln, Nachrichten und Multiplikatoren
Voraussetzungen:
- Java 21
- Maven 3.9+
Build:
mvn clean packageArtefakt (shaded):
target/RuinsCore-1.0-SNAPSHOT-shaded.jar
Für den Servereinsatz die JAR in den plugins-Ordner kopieren und Server neu starten.
Beim Start werden automatisch erstellt:
staff_alert_log- Speichert Staff-Alert Logsplayer_jobs- Speichert Job-Zuweisungen pro Spielerjob_leaders- Speichert Job-Leaderplayer_economy- Speichert das Guthaben jedes Spielersmoney_requests- Speichert Geldanfragen (PENDING/ACCEPTED/DECLINED)player_warnings- Speichert Verwarnungen pro Spielerplayer_sizes- Speichert die Spielergrößeauctions- Speichert alle aktiven Auktionenplayer_marriages- Speichert verheiratete Spieler-Paareplayer_marriages_names- Speichert Partner-Namen für Offline-Anzeigeplayer_playtime- Speichert die Spielzeit jedes Spielersplayer_welcome- Speichert welche Spieler bereits begrüßt wurdendoor_locks- Speichert alle Türschlösser mit Einstellungendoor_lock_whitelist- Speichert Whitelist-Spieler für jede Türreports- Speichert alle Spieler-Meldungen mit Status
Das Vanish-System versteckt Spieler vollständig für andere Spieler:
- Unsichtbar: Spieler sind für andere Spieler komplett offline
- Persistent: Neu joinende Spieler sehen vanished Spieler nicht
- Auto-Hide: VanishJoinListener versteckt alle vanished Spieler automatisch
- Keine Effecte: Nutzt nur
hidePlayer()/showPlayer()(kein Invisibility-Effect)
VanishService- Zentrale Verwaltung vanished SpielerVanishJoinListener- Versteckt vanished Spieler bei neuen Joins- Command:
VanishCommand
- Klasse im Package
de.satsuya.ruinsCore.commandsanlegen CoreCommandimplementieren- Optional Permission via
PermissionNodezurückgeben - Wird beim Start automatisch geladen
- Klasse im Package
de.satsuya.ruinsCore.listenersanlegen Listenerimplementieren und@EventHandlersetzen- Wird beim Start automatisch registriert
Das Report System erlaubt Spielern, andere Spieler zu melden, und Supportern, diese Reports über ein GUI zu verwalten:
- Spieler-Meldungen: Spieler können andere melden mit Grund
- Report-GUI: Supporter können alle Reports in einem GUI einsehen
- Detail-Ansicht: Klick auf Report zeigt alle Informationen
- Als bearbeitet markieren: Reporter können Reports als bearbeitet markieren und löschen
- Datenbank-Persistenz: Alle Reports werden in SQLite gespeichert
- Status-Tracking: Reports haben Status (OPEN/GESCHLOSSEN)
- Melde einen Spieler
- Grund wird in DB gespeichert
- Gemeldeter Spieler sieht Benachrichtigung
- Beispiel:
/report JibrilPlayer Spam in Chat - Require:
ruinscore.command.report.use
- Öffne die Report-Übersicht (nur für Supporter)
- Zeigt alle offenen Reports
- Klick auf Report zur Detail-Ansicht
- Require:
ruinscore.command.report.view
Das Report-GUI zeigt alle offenen Reports in einer übersichtlichen Liste:
Layout:
- Slots 0-44: Report-Items mit Reporter, Beschuldigt, Grund
- Slot 53 (oder letzter Slot): Zurück-Button
- Dynamische Größe: GUI vergrößert sich automatisch basierend auf Anzahl der Reports
Report-Item anzeigen:
Beschuldigt: JibrilPlayer
Von: OtherPlayer
Grund: Spam in...
ID: 42
Klick zum Einsehen
Die Detail-Ansicht zeigt alle Informationen zu einem Report:
Layout (27 Slots):
- Slot 10: Reporter-Info (PLAYER_HEAD mit Name und UUID)
- Slot 12: Pfeiltrenner (→)
- Slot 14: Beschuldigter-Info (PLAYER_HEAD mit Name und UUID)
- Slot 19: Grund-Info (BOOK mit vollständiger Grund)
- Slot 23: Zeit-Info (CLOCK mit Erstellungszeit)
- Slot 24: ✓ Bearbeitet (Grüner Block - Report löschen)
- Slot 26: ← Zurück (Barrier)
Funktionen:
- Klick auf "Bearbeitet" markiert Report als bearbeitet
- Report wird aus DB gelöscht
- Spieler sieht Bestätigung
- Zurück zur Übersicht
- Spieler meldet:
/report Hacker Speedhack - Report wird gespeichert: In
reportsTabelle mit Status OPEN - Supporter öffnet GUI:
/report gui - Supporter sieht Reports: List aller offenen Reports
- Supporter klickt auf Report: Detail-View öffnet sich
- Supporter liest Informationen: Reporter, Beschuldigt, Grund, Zeit
- Supporter markiert als bearbeitet: Klick auf grünen Block
- Report wird gelöscht: Aus DB entfernt, GUI aktualisiert
ReportService- Core-Logik (create, getOpenReports, closeReport)ReportGuiService- GUI-Verwaltung (Übersicht, Detail)ReportGuiListener- Event-Handler für GUI-InteraktionenReportGuiHolder- InventoryHolder für Reports- Command:
ReportCommand - Datenbank-Tabelle:
reports
Tabelle: reports
id- Eindeutige Report-IDreporter_uuid- UUID des Reportersreporter_name- Name des Reportersreported_uuid- UUID des Beschuldigtenreported_name- Name des Beschuldigtenreason- Grund der Meldungcreated_at- Erstellungszeitstatus- Status (OPEN/CLOSED)
✅ Spieler kann sich nicht selbst melden ✅ Spieler wird benachrichtigt bei Meldung ✅ Nur Supporter mit Permission können Reports einsehen ✅ Alle Reports werden persistent gespeichert
Das Door Lock System erlaubt Spielern, Türen zu schließen und Zugriff zu verwalten:
- Türschlösser: Spieler können Türen mit SHIFT+Rechtsklick schließen
- Öffentlich/Privat: Türen können öffentlich oder privat sein
- Whitelist-System: Private Türen können mit Whitelist verwaltet werden
- Admin-Override: Admins mit Permission können alle Türen verwalten
- Wache-Bypass: Die Wache kann alle Türen öffnen
- GUI-Verwaltung: Intuitive GUI für Türschloss-Verwaltung
- Datenbank-Persistenz: Alle Türschlösser werden gespeichert
- Auf verschlossene Tür: Öffnet Verwaltungs-GUI
- Auf neue Tür: Erstellt neues Türschloss und öffnet GUI
- Nur Besitzer oder Admins können verwalten
- Require: Keine (jeder kann seine Türen sperren)
Hauptmenü (27 Slots):
- Slot 11: Öffentlich/Privat Button (Toggle)
- Slot 13: Info-Anzeige (Besitzer, Status)
- Slot 15: Whitelist-Button (nur wenn privat)
- Slot 26: Zurück-Button
Whitelist-GUI (54 Slots):
- Slots 0-47: Spieler auf Whitelist (klick zum Entfernen)
- Slot 48: ➕ Spieler Hinzufügen
- Slot 49: ← Zurück
Spieler-Auswahl-GUI (54 Slots):
- Slots 0-48: Online-Spieler (nicht auf Whitelist)
- Slot 49: ← Zurück
- Tür erstellen: Shift + Rechtsklick auf neue Tür
- GUI öffnet sich: Hauptmenü mit Optionen
- Status ändern: Klick auf Öffentlich-Button
- Grüner Button = Öffentlich (alle können öffnen)
- Roter Button = Privat (nur Whitelist)
- Whitelist verwalten (nur bei privaten Türen):
- Klick auf Whitelist-Button
- Klick auf Spieler zum Entfernen oder ➕ zum Hinzufügen
- Öffentlich: Jeder kann die Tür öffnen
- Privat ohne Whitelist: Nur der Besitzer kann öffnen
- Privat mit Whitelist: Besitzer + Whitelist-Spieler
- Wache-Bypass: Wache kann immer öffnen
- Admin-Override: Admins können immer verwalten
DoorLockService- Core-Logik (erstellen, Whitelist, Permissions)DoorLockGuiService- GUI-Verwaltung (Hauptmenü, Whitelist)DoorLockListener- Event-Handler (Shift+Rechtsklick)DoorLockGuiListener- Event-Handler für GUI-ClicksDoorLockGuiHolder- InventoryHolder für HauptmenüDoorLockWhitelistGuiHolder- InventoryHolder für Whitelist-GUIs- Datenbank-Tabellen:
door_locks,door_lock_whitelist
Tabelle: door_locks
door_key- Eindeutiger Schlüssel (world_x_y_z)world,x,y,z- Tür-Positionowner_uuid- UUID des Besitzersowner_name- Name des Besitzersis_public- Öffentlich oder privatcreated_at- Erstellungszeit
Tabelle: door_lock_whitelist
door_key- Referenz zur Türplayer_uuid- UUID des Spielersplayer_name- Name des Spielers
✅ Nur Besitzer oder Admins können Türschloss verwalten ✅ Wache kann alle Türen öffnen ✅ Whitelist nur bei privaten Türen ✅ Spieler können nicht zweimal auf Whitelist sein ✅ Tür-Position wird korrekt gespeichert
Das Pentagram System erzeugt Feuer-Pentagramme um die Position eines Spielers:
- Feuer-Pentagramme: Erzeugt 5-zackige Sterne aus Feuer-Partikeln
- Automatische Löschung: Pentagramm hält 10 Sekunden
- Pro Spieler: Jeder Spieler kann nur sein eigenes Pentagramm haben
- Visuelle Effekte: FLAME-Partikel in stabilen Linien
- Live-Animation: Pentagramm wird 5x pro Sekunde neu gezeichnet
- Erstelle ein Pentagramm um deine Position
- Hält 10 Sekunden lang
- Nur eine Pentagramm pro Spieler aktiv
- Erneutes Ausführen überschreibt vorheriges
- Beispiel:
/pentagram - Require:
ruinscore.command.pentagram
Das Pentagramm besteht aus:
- 5 Spitzen in einem Kreis (Radius: ca. 2 Blöcke)
- FLAME-Partikel (Feuer)
- Verbindungslinien zwischen den Spitzen (5-zackiger Stern)
- Animierte Anzeige (wird alle 0.1 Sekunden neu gezeichnet)
- Spieler gibt
/pentagramein - Pentagramm wird um seine Position erzeugt
- Visuelle Effekte sind sofort sichtbar
- Nach 10 Sekunden verschwindet das Pentagramm automatisch
- Spieler kann neues Pentagramm erstellen
PentagramService- Core-Logik (Erstellung, Animation, Löschung)- Command:
PentagramCommand - Nutzt
BukkitSchedulerfür repeating Tasks - Berechnet Pentagramm-Spitzen mathematisch
- Spawnt FLAME-Partikel in Linien
Aktuell fest im Code:
- Radius: ca. 2 Blöcke
- Update-Rate: Alle 2 Ticks (0.1 Sekunde)
- Dauer: 10 Sekunden (200 Ticks)
- Partikel-Abstand: 0.4 Blöcke pro Partikel
- Partikel-Typ: FLAME
- Verwendet trigonometrische Funktionen (Math.cos/Math.sin)
- Berechnet 5 Spitzen à 72° Winkel-Abstand
- Verbindet jede Spitze mit den nächsten zwei Spitzen
- Spawnt Partikel entlang aller Linien
- Cleanup erfolgt automatisch nach 10 Sekunden
- Die Listener-/Command-Loader arbeiten package-basiert; falsche Package-Namen in
config.ymlverhindern Auto-Load. - Vanish-Status wird NICHT persistiert über Restarts (nur im RAM während des Servers)
- Admin-Features sind standardmäßig auf
opgesetzt (sieheplugin.yml)