• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

PlugIn [SOLVED] Fehler mit eigener API

FluffiPowa

Minecrafter
Registriert
19 Januar 2021
Beiträge
9
Diamanten
254
Einen schönen guten Abend, ich versuche gerade eine API zu schreiben für mein Netzwerk doch leider klappt dies nicht so ganz...

Ich benutze Maven für meine Plugins und das in IntelliJ.

Was ich versuche:
BungeeCord sendet die Daten von dem Spieler aus der Datenbank an die Lobby.
Scrhitt 1). - API erhält die Daten von BungeeCord.
Schritt 2). - Das Plugin holt sich die Daten von dem Spieler aus der API.

Das Problem ist jetzt das ich beim Build eine Warnung erhalte das es die plugin.yml zwei mal in Plugin 1 gibt und dann kommen Fehlermeldungen in der Konsole sobald ich versuche den Server zu starten da die falsche plugin.yml für das erste Plugin geladen wird und ohne plugin.yml in der API kriege ich Fehlermeldungen in der Konsole weil sie fehlt doch was mache ich falsch? gibt es ein gutes Tutorial oder kann mir jemand eine andere Lösung vorschlagen?

Vielen Dank!
 

CubBossa

Schafhirte
Registriert
17 Juli 2015
Beiträge
125
Diamanten
369
Minecraft
CubBossa
Ich verstehe nicht, wieso du 2 plugin.ymls in einer jar haben solltest. Vielleicht hast du deine API (wenn das ein gesondertes projekt ist?) mit Compile-Scope in der pom.xml angegeben. Auch wenn die API gar keine plugin.yml haben sollte solang es kein eigenständiges Plugin ist.
Wie greift denn dein Paperplugin auf die API, wie dus genannt hast, zu? Liegt dieses API-Projekt kompiliert im Bungeecord Projekt, in jedem Paper Projekt oder in allen Projekten? Wenn du einfach in Paper keine Ahnung MyAPIClass.getInstance() machst ist das ja eine gesonderte Instanz von der zu Bungeecord und beide haben ganz andere Spielerwerte geladen.

Eigentlich kenne ich als gängige Wege für kleinere Programmierungen, dass man den Messaging Channel verwendet oder eben für sowas wie Spielerdaten erstmal ne Datenbank.
Wenn du die Daten erst ausliest und dann per Messaging Channel an die Paper Server verschickst, machst du es dir ja doppelt kompliziert. Und dann bräuchtest du ja nicht mal eine Datenbank, weil du einfach in Bungeecord mit Files arbeiten könntest. Wenn alle Daten eh vom Bungeecord ausgehen.

Ich habe Projekte bei mir so aufgebaut, vielleicht hilft dir das:
1. Core Modul mit Paper als dependency, aber ohne Klasse, die JavaPlugin extended. Also einfach nur Minecraft Methoden, die ich verwenden kann. ItemBuilder, GUI Builder etc. Kein Plugin.
2. Database Modul, das alle Methoden für die Datenbank zugriffe ordentlich enthält. Es hat auch nicht Paper als Dependency weils einfach nur für die Datenbank-Zugriffe gut sein soll. So ist es auch immer Kompatibel für alle Java Programmierungen. Also Bungee, Paper und sonst was
3. Ein Paper Plugin, das Core und Database als Compile-Scope dependencies enthält. Es greift auf die Methoden zu, hat aber trotzdem nur seine eigene plugin.yml. Es kümmert sich um alles allgemeine und liegt auf jedem meiner Server.
4. Ein Waterfall Plugin, das Core und Database als Compile-Scope enthält. Man darf dann natürlich keine Paper methoden verwenden. Aber zum Beispiel meine Klassen zum Chatformatieren mit TextComponents gelten ja für Bungee wie Paper.
5. Pro Spielmodus nochmal ein Plugin, das wenns braucht Core und Database als Provided Scope hat und die Runtime dann aber im Hauptplugin für Paper findet. Ist also quasi eine Erweiterung zu meinem Hauptplugin

Ob das so ein guter Ansatz ist, weiß ich nicht :D hab kein Informatik studiert oder so, hab einfach getan, was sich intuitiv richtig angefühlt hat und bis jetzt funktioniert es ziemlich vernünftig und ist meiner Meinung nach ordentlich
 

FluffiPowa

Minecrafter
Registriert
19 Januar 2021
Beiträge
9
Diamanten
254
Vielen Dank für diesen sehr tollen Kommentar!

Die Datenbank läuft aus Sicherheitsgründen auf einem anderen Server weshalb ich mit Bungeecord bevor der Spieler sich mit einem Server verbunden hat die Daten abruft und zwischenspeichert und einige dieser Daten dann an den Server sendet mit dem sich dieser Spieler dann verbindet was ziemlich schnell und ohne Verzögerung funktioniert da die Server auf einem laufen.

Dank nur einer Verbindung zur Datenbank mit Bungeecord kann ich vermeiden das mehrere Verbindungen zur Datenbank hergestellt und gehalten werden was meiner Meinung nach besser ist um nicht jedes mal die Daten aus der Datenbank abzurufen nur weil der Spieler mal den Server wechselt.

Die API soll als ein eigenes Plugin laufen da die Daten von Bungeecord an die API gesendet werden soll und dort einige Informationen von diesem Spieler dann zwischengespeichert werden soll bis dieser den Server verlässt und mit den anderen Plugins möchte ich dann verschiedene Informationen abrufen von dieser API damit nicht mehrere Sockets von Bungeecord für die verschiedenen Plugins erstellt werden müssen.

Mein Problem ist halt das wenn ich die API in eines meiner Plugins mithilfe von POM als dependency einbinde und dann bei Maven auf "install" klicke damit das Plugin kompiliert wird, wird die plugin.yml von der API die plugin.yml von dem Plugin welches ich erstellen möchte überschreiben was dann zu einer Warnung in IntelliJ führt und einer Fehlermeldung in der Konsole auf meinem Server...

Habe ich vielleicht die API falsch in der pom.xml eingebuden oder etwas wichtiges vergessen?
Code:
<dependency>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <scope>system</scope>
    <systemPath>...</systemPath>
</dependency>

PS: Ohne das Einbinden funktionieren die Plugins aber das erfüllt halt dann nicht den Zweck ^^
 
Oben