• 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!

Standardisierung & Modularisierung von Plugins - Ein Denkanstoß meinerseits...

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
24
Diamanten
212
Minecraft
FastFelix771
Hallöle. Let's have a talk.

Bereits einige Monate lang und im Rahmen mehrerer (sowohl eigener als auch fremder) Projekte, hat sich bei mir eine gewisse Unzufriedenheit breitgemacht was die so called "Entwicklung" von Minecraft Plugins angeht.

Ich bin ein Mensch der offen entwickelte Standards favorisiert und sich für durchdachte und saubere Planung sowie intensive Dokumentation von Projekten einsetzt.
Mit dieser Einstellung überfordere und nerve ich sowohl einige Arbeitskollegen als auch den Großteil der Minecraft "Devs" or whatsoever.
Ich meine nicht, dass wir losrennen sollten und für jedes Minecraft-Plugin ein RFC-Dokument aufsetzen müssen.
Nein, es handelt sich nach wie vor um ein Spiel und hat bei real-world Standards nichts zu suchen.

Zahlreiche Kinder und Jugendliche haben in den vergangenen Jahren durch Minecraft die Freude am Programmieren gefunden und sich auf die Fahne geschrieben Java zu lernen und haufenweise Minecraft-Plugins zu fabrizieren.

Nun gibt es einige Gruppen von Leuten die man beschreiben könnte - ich nehme eine als Beispiel, beschreibe die Gedankengänge und zeige auch dessen Konsequenzen auf.
Eine kleine Situation die sicherlich jedem Serverbetreiber, sei es damals oder heute, schon mal in einer ähnlichen Form entstanden ist.


Der über alles erhabene Einsteiger
"Essentials ist ein Krampf, bäh GriefPrevention is ja auch irgendwie doof und WorldEdit ist ja total langsam und laggy und auch Schrott. Das schreib ich viel besser selber."
Dies ist die tägliche Einstellung eines jungen Programmiereranfängers, der die ersten Erfolge seiner Lernfortschritte erntet, indem im Chat tolle bunte Nachrichten erscheinen und man einen Kontostand aus einer YAML Datei... pardon - "Bukkit Configdatei" auslesen und überschreiben kann. Alles selbst gemacht und mittlerweile komplett fehlerfrei* und fancy**.


Getrübt von den schnellen Erfolgen die das Spiel und die ausgiebige Dokumentation sowie diverse YouTube-Kasper ermöglicht haben, fängt der Programmieranfänger nun rasch an die eingebürgerten und jahrelang existenten Plugins wie Essentials und co. in Frage zu stellen.
(An dieser Stelle sei gesagt, dass ich Essentials oder sonstige Plugins nicht zwangsläufig mag, empfehle oder sonst irgendwie werte - diese dienen bloß als Beispiele.)

Man legt ein neues Projekt in Eclipse an und coded auch gleich los!
/spawn
/bal
/home
/tp
/tpa

bla bla.

Alles läuft und schaut toll aus - die Chatnachrichten sind farbig und ansprechend für den Benutzer (aus Sicht des Programmierers).
Hier und da kommen auch tolle Scoreboards zum Einsatz, die man eigentlich gar nicht braucht, aber da man mittlerweile auch gelernt hat wie man diese geklauten Codeschnipsel "richtig" nutzt, baut mans mal mit ein - ist ja cool shit.

Danach lädt man sein stolzes Werk zusammen mit ein paar schalen Sätzen in der Beschreibung auf Bukkit, Spigot und co. hoch und erfreut sich an den ersten 100 Downloads.

Ein weiteres All-In-One Plugin ist geboren.
Es folgt ganz und gar der Nase des Programmierers und sofern man doch eine Spur Dynamik in Form von Konfigurationsmöglichkeiten aufbringt, beschränkt sich dies meist auf ein paar Startwerte, Nachrichten und vermutlich auch direkt der Speicherung von Nutzdaten, weil die Configs dafür ja super herhalten.

Der Server Besitzer freut sich anfangs sehr über das Plugin, bis er feststellt, dass Warps doch was feines wären und fragt dies sogar bei dem Programmierer an.
Der Programmierer des All-In-One Plugins hat kein Plan was Warps sind und meint, dass das eh keiner braucht.

Daraufhin sucht der Server Besitzer einfach ein anderes Plugin mit dem gewünschten Funktionsumfang.
Er findet UltimateBukkitEssentialsOneXS von einem anderen Programmierer, der bereits auf mehreren Servern war und meint, dass Warps schon mit rein sollten.

Der Serverbesitzer merkt aber nun, dass UltimateBukkitEssentialsOneXS eine ganz eine Config hat und im Ordner noch so eine komische database.sqlite Datei auftaucht.
Wie soll er jetzt die Daten seiner 70 aktiven Stammspieler alle übertragen? Er wendet sich hoffnungsvoll an beide Programmierer.
Diese konzentrieren sich erstmal auf einen digitalen Schwanzvergleich - schließlich ist man selbst ja der bessere Dev und hat das coolere Plugin.

Einer von beiden weiß nicht was SQL ist und soll und der andere meint, dass YAML Dateien ein Rotz sind.
Der Andere meint, dass ........

Und an dieser Stelle ein Cut um die Ereignisse zusammenzufassen:

Zwei Programmierer haben jeweils ein Plugin programmiert um das Gleiche zu tun: Spawns setzen, Teleportieren, Economy etc.
Beide bauen auf die Möglichkeiten die sie kennen und persönlich favorisieren. Die Umsetzung erfolgt nach Augenmaß des Programmierers.
Es ist keine nennenswerte Architektur weit und breit zu sehen.

Ein Serverbetreiber, der nun eins dieser Plugins für seine Spieler bereitstellt, bindet sich an den einen Entwickler und darf hoffen, dass dieser nicht schlagartig den Kurs ändert.
Sollte der Serverbetreiber sich nun von diesem einen Produkt trennen wollen, entwertet er seine Daten, sofern das andere Produkt nicht in der Lage ist, die genaue Datenstruktur der genutzten Version des anderen Plugins zu interpretieren und zu konvertieren.
Ein gewiefter Serverbetreiber ist in den meisten Fällen auch in der Lage, mit etwas Zeit und Mühe selbst ein kleines Skript zu entwerfen, dass ggf. eine YAML Datei ausliest und in die passenden Tabellen umformt.
Das erfordert allerdings, dass der Serverbetreiber Erfahrung mit beiden Technologien hat und bereit ist diese Prozedur bei jedem Wechsel durchzuspielen.
Sowas ist weder spaßig noch wirtschaftlich noch sonst irgendwie toll und ein Zustand der solche Patchwork-Maßnahmen erzwingt sollte tunlichst vermieden werden.

Sollte der Serverbetreiber nicht über das nötige Know-How zum basteln verfügen, dann steht es nun schlecht um die Daten unserer aktuellen Spieler.
Und sollte der Wechsel z.B. aufgrund eines Sicherheitslecks unausweichlich sein, opfert man die Spielfortschritte seiner Spieler und vergrault einen Großteil davon sehr schnell - besonders, wenn das öfters passiert.

Wir haben also zwei Programmierer, die zwar lernen mit Java zu programmieren in Form von Minecraft Plugins - sich jedoch auf ihre Eigeninnovation konzentrieren ohne Rücksicht auf Verluste und dabei auch gelegentlich eine Arroganz aufbauen, die sie sich gar nicht leisten könnten, statistisch betrachtet.
Dies kriegen Serverbetreiber zu spüren, indem sie in die oben genannte Situation geraten und damit ihrer Community erheblichen schaden zufügen können.

Und dabei ist das erst der Anfang... wir sprachen bisher von einem Plugin, dass alles kann.
Was ist, wenn ich zwei Plugins habe, die aber zusammenarbeiten sollen? Oh nose.
Die Liste der Fettnäpfchen ist lang.

Keiner Partei kann man nun so wirklich die Schuld geben.
Die Programmierer sind in der Regel Anfänger und wollen lernen und ihre Erfolge mit anderen teilen - ohne Garantie für irgendwas - it's all fun and game.
Der Serverbetreiber ist nicht automatisch immer ein Technik-Crack sondern meist eher jemand der sozial begabt ist und eine Vision hat, die er gerne mit anderen umsetzen möchte.

Nun, jetzt wird es langsam Zeit von dem negativen Gelaber abzuweichen und auch mal einen Lichtblick zu präsentieren.
Ein Plugin namens Vault.

Vault selbst ist nicht der heilige Gral, um den es geht, sondern viel eher das einzige wirklich bekannte Beispiel.
Es nutzt nämlich einen Teil der Bukkit-API, der niemals sein volles Potenzial erreichen konnte, da er schlicht von 99,99% der Programmierer ignoriert wird.
Was der Bauer nicht kennt, isst er nicht. Basta.

Ich spreche von der Service-API.
Für die Programmierer hier eine kurze (englische) Einleitung dazu aus dem Jahre 2011 (wie schon gesagt.... es wird ignoriert, also gibts auch kaum aktuelle Hilfestellungen): Bukkit Services API Intro

Die Service-API ist grob formuliert eine Ansammlung von Definitionen und Implementierungen - hier als Service und Provider bezeichnet.
Was bedeuten diese zwei Begriffe im Zusammenhang mit Bukkit & Minecraft bzw. Java und wie sollte ich sie behandeln?

Zuerst sei dazu gesagt: Behandelt sie getrennt voneinander.

Die Definition wird in Java durch ein Interface realisiert.
Übersetzen wir diesen Begriff mal: Interface -> Schnittstelle.

Was definiere ich denn in einer Schnittstelle? (Achtung: Java-spezifische Begriffe könnten auftauchen)
Mit meiner Schnittstelle gebe ich die gewünschte Struktur und erwartete Verhalten von JEDER Implementierung vor.
- Ich bestimme die Methoden die existieren müssen
- Ich bestimmte die Parameter und Rückgabe-Typen dieser Methoden
- Ggf. beziehe ich weitere als notwendig für die Implementierungen erachtete Schnittstellen mit ein (z.B. Serializable, Cloneable)
- Rein auf den Code bezogen: Allerhand In-Code-Documentation a la JavaDocs um gewisse Regeln an Ort und Stelle nochmal schriftlich festzuhalten

Kurzum lege ich jegliches Aussehen und Verhalten fest, dass ich von einer Implementierung erwarte.
Jedoch wird dort keine Zeile irgendeine Logik enthalten, geschweige denn welche, die sich mit der tatsächlichen Lösung befasst.
Die Schnittstelle dient der Beschreibung (Definition) wie eine Lösung auszusehen hat.

Vault zum Beispiel liefert ein paar solcher Schnittstellen, nehmen wir hier mal das bekannteste Beispiel: Economy.
Vault Economy Schnittstelle

Hier werden haufenweise Methoden mit entsprechenden Beschreibungen definiert, für diverse Eigenschaften die ein gutes (virtual-) Economy-Plugin bieten sollte.
Sowohl zum Auslesen als auch zum Bearbeiten.
Dazu gehören unter Anderem:
- Name der Währung
- Name der "Unterwährung" (Cent z.B.)
- Entsprechende Namen in der Pluralform
- Die Möglichkeit eine Zahl inkl. Nachkommastellen zu formatieren
- Den einen Spieler Geld auf das Konto des anderen Spielers zu überweisen, mit der Möglichkeit das Ergebnis der Transaktion auszuwerten (EconomyResponse)
Und zahlreiche Weitere Features...
Dazu überall Java-Doc Kommentare mit Hinweisen an das

Seht ihr dort irgendwo eine Zeile, welche die beschriebene Funktionalität umsetzt?
Ich auch nicht! ;)

Das ist auch nicht Aufgabe der Schnittstelle.

Nun - jetzt da wir definiert haben wie ein Economy Service auszusehen und sich zu verhalten hat, kann man hingehen und eine Implementierung erschaffen.
Im Falle von Vaults Economy Service haben das auch einige Leute getan.
15 Economy Plugins sind bereits auf der Pluginseite von Vault offiziell aufgelistet, welche allesamt die Economy Schnittstelle implementieren und hoffentlich gemäß der definierten Regeln die gewünschte Logik bereitstellen.

Wenn nun ein anderes Plugin daherkommt und über die Economy-Schnittstelle von Vault mit welchem Economy-Plugin auch immer kommunizieren will, dann geht er zur Bukkit Services-API und fragt einen Provider an.
Provider = Implementierung

Jedes Economy-Plugin registriert seine eigene Implementierung für die Economy-Schnittstelle bei Bukkit.
Und jedes Plugin, dass mit einem Economy-Plugin reden will, geht zu Bukkit.
Es läuft alles bei Bukkit zusammen - bzw. in der Service-API von Bukkit.

Wenn ein Provider angefragt wird, wird Bukkit, falls ein oder mehrere Provider vorhanden sind, ein dem Plugin unbekanntes Objekt zurückgeben, welches aber zuverlässig die Regeln der Schnittstelle befolgen sollte.

Die Vorteile die sich daraus ergeben sind folgende:
- Ich muss als Pluginentwickler mich nicht darum kümmern jedes Eco-Plugin auf Erden zu unterstützen und gesondert anzusprechen, wenn die bekannte Economy-Schnittstelle ansprechen kann und einfach sage "Das Plugin erfordert ein Economy-Plugin, dass Vaults Economy-Schnittstelle implementiert hat."
- Ich als Serverbetreiber kann bequem zwischen diversen Plugins hin und her wechseln, solange diese allesamt die Economy-Schnittstellen richtig implementieren, ohne dass das den Betrieb der anderen Plugins beeinflusst.

Das ganz ganz oben genannte Problem mit den unterschiedlichen Datenformaten ist zwar noch nicht gelöst damit, jedoch schonmal das Problem der Zusammenarbeit der Plugins.
Was wäre wenn man sich hinsetzen täte und z.B. Import- und Export-Methoden in der Schnittstelle definieren würde und dazu ein erforderliches Datenformat dokumentiert?

Jedes Plugin wäre noch immer frei wie ein Vogel seine Daten in jedem gewünschten Format zu speichern - jedoch muss es eine Möglichkeit bieten seine Daten in ein unabhängiges Format zu konvertieren und auch Daten aus diesem unabhängigen Format heraus zu interpretieren.
Dies ist nur einer von vielen Ansätzen womit man auch solche Probleme behandeln könnte.

Nun aber mal langsam genug der Rederei.

Ich hätte ziemlich Lust darauf, mit ein paar interessierten Personen aus diesem Forum ein kleines Gremium aufzubauen um ein paar solcher Schnittstellen zu diskutieren und letztlich zu definieren.
Dazu sollte dann jeweils eine Referenz-Implementierung folgen - zu Lern-, Demonstrations- und Testzwecken für Endbenutzer und Entwickler.

Dies möchte ich in einem offenen Rahmen tun, wo jeder dazu beitragen kann.
Dieses "Gremium" soll dann die Integrität der Schnittstellen bewahren und die vorgeschlagenen Ideen gemeinsam bewerten, bevor diese veröffentlicht werden.

Rückwärtskompatibilität und Versionierung sind essentiell für diese Schnittstellen, da man das ganze vergessen kann - wenn jeden Tag neue Methoden definiert werden und der Standard nicht statisch genug ist. Zu dieser Problemstellung habe ich übrigens auch bereits funktionierende Lösungen - jedoch würde das allmählich den Rahmen sprengen.

Stellt euch das ganze ungefähr in diesem Stil vor: https://github.com/DefinitelyTyped/DefinitelyTyped

Eine Ansammlung zahlreicher Definitionen für verschiedenste Minecraft-bezogene Aufgaben, wie z.B. Verwaltung von Welten, Homes, Spawnpoints, Economy, Permissions oder ferner auch Konfigurationsverwaltung, zentralisierte Datenbankbereitstellung etc. pp.
Jeder kann weitere Definitionen schreiben und vorhandene abändern, während eine gewisse Gruppe darüber entscheidet ob diese Änderungen im Sinne der Allgemeinheit sind und ggf. Änderungen an eingereichten Ideen vorschlagen, bis diese ins Konzept passen.

Auf diese Art und Weise könnte man tausende Plugins nahtlos miteinander kommunizieren und zusammenarbeiten lassen und den Aufwand eines einzelnen Plugins drastisch senken.

Kurzbeispiel:
Ein Logging-Plugin könnte seine Loginformationen schlicht über eine Schnittstelle für Statistik abgreifen.
Dann muss sich das Logging-Plugin nicht darum kümmern, wie es all die auftretenden Ereignisse sammelt, sondern greift sie durch die Schnittstelle von einem Plugin ab, dass nichts anderes als genau das tun soll.
Durch die Definition der Schnittstelle kann auch schnell festgestellt, ob auch alle gewünschten Daten in der gewünschten Art und Weise zur gewünschten Zeit (z.B. real-time) zur Verfügung stehen.

Das Logging-Plugin greift sich vom Datenbank-Service die nächstbeste Verbindung zu einer z.B. MySQL-Datenbank und führt seine Queries aus.
Ohne, dass es selbst extra aus einer Config Zugangsdaten, Adressen etc. auslesen, einen DB Treiber laden, die Verbindung aufbauen und bereitstellen muss.

Man könnte die Dinge um einiges modularer gestalten, man müsste nicht ständig wiederholenden Code schreiben oder diesen irgendwann in seine eigene "Tools-Lib" stecken, sondern man nutzt das vorhandene Ecosystem und kann sich darauf konzentrieren das eigentliche Problem zu lösen, dass das Plugin lösen soll anstatt tonnenweise Boilerplate zu bauen. Das führt dementsprechend zu höherer Qualität und Wartbarkeit der Plugins.
Dafür braucht es aber eben ein gesundes Ecosystem.

Und jetzt ist genug.
Nun will ich Feedback.

Viel Spaß beim Lesen!
- Felix

PS:
-> Änderungen können noch folgen
-> Rechtschreibfehler, fehlende Wörter etc. sind aufgrund von Müdigkeit, Hastigkeit und Hunger (will seit 2 Stunden essen machen eigentlich) durchaus möglich. Hinweise sind sehr willkommen, damit ich das beheben kann.
-> Bei Fragen: Schreibt unter den Thread, schickt mir ne PN, wie auch immer - ich bin für alle Fragen offen und gebe gerne meinen Senf dazu. Argumente, Diskussionen etc. und besonders Verbesserungsvorschläge sind ausdrücklich Willkommen!

PPS:
@SirYwell @BlackHole @JOO200 @SasukeKawaii
@JTK222 @Matthias @diese_nervigen_chinesischen_Schriftzeichen
Eure Meinungen dazu fände ich besonders interessant in diesem Fall.
Ihr alle helft ebenfalls regelmäßig jungen Programmierern in diesem Forum weiter und ihr alle(?) habt oder hattet schonmal eigene Serverprojekte am laufen oder wart ein Teil von welchen.
Wie steht ihr dazu?
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
728
Ich hab ungefähr die Hälfte gelesen, die andere Hälfte überflogen und mir sind nur diese beiden Links eingefallen:

https://xkcd.com/927/
https://de.wikipedia.org/wiki/Not-invented-here-Syndrom

Sowie:
https://de.wikipedia.org/wiki/Overengineering

Ich wird mir den Thread vermutlich bei Zeit/List genauer durchlesen, denn ich konnte auf die schnelle den Kern des Aufrufs nicht finden. Ist eigentlich nur eine Textwand und ich würde ne Umstrukturierung empfehlen: Was ist das Problem? Warum ist es ein Problem? Was ist der Vorschlag? Wie würde er das Problem lösen?

Kleiner Anmerkung trotzdem: Bukkit hat bis zum heutigen Tag kein gescheites Permissionsystem, für Wildcardpermissions muss über Reflections gehackt werden. Ansonsten sind die meisten Plugins einfach von unerfahrenen Entwicklern geschrieben. Die wenigen guten bieten in der Regel auch eine Möglichkeit der Integration, z.B. Vault. Dazu kommt dann das Problem, dass es teilweise schon mit Bukkit allein unmöglich ist bestimmte Funktionen zu implementieren, wenn du jetzt auch noch gleichzeitig versuchst irgendwie sämtliche Formen von Datenhaltung zu implementieren, bis du in der Callbackhölle.

Ansonsten gibt's noch das andere Problem, dass Entwickler, die wenig Erfahrung haben meiner Erfahrung nach gar nicht in der Lage sind die deutlich bessere Lösung zu erkennen. Anstelle das System zu verstehen, das du vorgegeben hast, stelle sie es in Frage, bauen ihr eigenes und rennen in genau die Probleme, die du bereits vorhergesehen und durch das Design vermieden hast. Mal ganz davon abgesehen, dass mich andere Leute für so ein Design bezahlen würden und man in der Minecraft Community nicht mal vom Mojang selbst Unterstützung bekommt.

Außerdem: Die Bukkit API ist Müll :D wollte ich an der Stelle einfach nochmal betont haben. Und es ist japanische Schrift.
 
Zuletzt bearbeitet:

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
438
Minecraft
SirYwell
Um ehrlich zu sein, habe ich die die Service API bisher selber nicht weiter beachtet. Vermutlich einfach deshalb, weil ich im Normalfall keine komplexeren Plugins entwickle, die für die Öffentlichkeit gedacht sind. Andererseits ist mir allerdings bisher auch keine Lösung außer Vault begegnet, wo die Service API genutzt wird.

Generell kann ich deinen Gedankengang nachvollziehen, ein wenig Ordnung ins Chaos bringen wäre sicherlich mal angebracht. Die Frage, die sich mir stellt, ist halt, ob ein solcher Aufwand von der Community geschätzt werden würde, oder ob trotzdem alle vor sich hin entwickeln. Ich seh' ja, wie oft die Entwickler ihre Koordinaten in einem riesigen Chaos abspeichern, weil sie nicht verstehen (wollen?), dass Location ConfigurationSerializable implementiert.

Die wenigen hochwertigen Plugins, die es gibt, bieten meistens auch gute Schnittstellen, die zwar nicht über die Service API laufen, aber dennoch leicht verwendbar sind und im Normalfall auch erstaunlich gut dokumentiert sind.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
24
Diamanten
212
Minecraft
FastFelix771
Und es ist japanische Schrift.
Das habe ich befürchtet. Ich bitte um Verzeihung.

Ansonsten sind die meisten Plugins einfach von unerfahrenen Entwicklern geschrieben.
Stimme zu.

Die wenigen guten bieten in der Regel auch eine Möglichkeit der Integration, z.B. Vault.
Ganz genau. Und die Schnittstellen von Vault werden seit Jahren erfolgreich in zahlreichen Plugins eingesetzt.
Ich möchte gerne mehr solcher Schnittstellen schaffen für andere Problemdomänen, außerhalb von Economy, Permissions und Chat.

A standard that fits everyones use-case ist ja nicht das was ich möchte.
Das ist auch nicht möglich.
Jeder bastelt im Moment seine eigene Extrawurst mit extra XY-API die ohnehin keine Sau nutzt am Ende.
Weitere Schnittstellen die nicht jeden use-case, aber den vorhersehbaren Großteil abdecken sind das Ziel.
z.B. eine Schnittstelle zur Verwaltung von Spawnpunkten:
- CRUD Operationen für einen globalen Spawn
- CRUD Operationen für per-world Spawns

Sollte 99,9999999% aller möglichen Spawn-Plugins abdecken.
Der Rest ist dann nunmal spezifisch. Man kann einfach nicht alles abdecken, warum sollte man auch... ?

Ein Modul soll eine Sache können und diese Sache richtig gut.
Dies lässt sich natürlich nicht auf jedes Vorhaben anwenden! Aber auf gewisse Kleinigkeiten absolut. Spawns, Warps, Homes, etc.
Anstatt tonnenweiser merkwürdiger Monolithen die alle ihre eigene API mitbringen.

Dazu kommt dann das Problem, dass es teilweise schon mit Bukkit allein unmöglich ist bestimmte Funktionen zu implementieren
Sicherlich - einige sogar.
Aber ich bin mir nicht sicher ob wir an das Gleiche denken... hast du ein Beispiel für mich?

Ansonsten gibt's noch das andere Problem, dass Entwickler, die wenig Erfahrung haben meiner Erfahrung nach gar nicht in der Lage sind die deutlich bessere Lösung zu erkennen. Anstelle das System zu verstehen, das du vorgegeben hast, stelle sie es in Frage, bauen ihr eigenes und rennen in genau die Probleme, die du bereits vorhergesehen und durch das Design vermieden hast.
Das ist ein ernstes Problem, in der Tat.
Und das kann lediglich durch ausreichende Dokumentation, Aufklärung und Beispielen samt Lernmaterialien behoben werden.
Seien es verfluchte YouTube Tutorials oder Blogbeiträge oder Bukkitforum Threads oder sonst was.

Mal ganz davon abgesehen, dass mich andere Leute für so ein Design bezahlen würden und man in der Minecraft Community nicht mal vom Mojang selbst Unterstützung bekommt.
Tja, damit leben wir ja nun schon eine gewisse Zeit lang. Und das wird sich so schnell sicherlich nicht ändern.

Außerdem: Die Bukkit API ist Müll :D wollte ich an der Stelle einfach nochmal betont haben.
Dann müssen wir doch nicht mehr Müll drauf schütten oder?
Selbst wenn man nicht unter idealen Bedingungen arbeitet, kann man doch trotzdem ein gewisses Maß an Qualität anstreben.
 

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
272
Minecraft
JTK222
Phu... eigentlich wollte ich alles durchlesen, nach 3/4 konnte ich es aber nur noch überfliegen xD
Also, was ich hier sehe ist eine Kritik über den ständigen Wettkampf der Plugin Programmierer.
Und um ehrlich zu sein, ich habe damit glücklicherweise nichts zu tun :3

Als teil der Modding Community kann ich nur sagen: Ich kenne dieses Verhalten kaum bis gar nicht.
Bei uns hilft jeder jedem, es gibt klar definierte standards (an die sich zwar nicht immer alle halten,
aber nach 2-3 Jahren sind dann doch meist alle dort angekommen).
Klar sind die meisten Sachen dort nicht einfach austauschbar, in der Form dass nix kaput geht.
Aber für die Nutzer ist es kein Problem die Flüssigkeits Systeme von 30 verschiedenen Mods zu verbinden,
auch für die 5 verschiedenen Energie Systeme gibt es dutzende Möglichkeiten alles zu verbinden.

Hauptgrund für die Unterschiede?
Die Zielgruppe, und somit das potenzielle einkommen. Bei Plugins gibt es sehr viel kostenpflichtiges, in der Modding Community eher ein NO GO
Dort machen es die meisten weil es ihnen Spaß macht, wodurch es auch keinen Konkurrenzkampf gibt.
(Es werden öfter mal mods auf anfrage gegen geld programmiert, aber selbst die werden im nachhinein oft gratis veröffentlicht)

Aber auch bei moddern ist nicht alles friede freude eierkuchen. Es gibt Hunderte Libraries and API's,
so gut wie jeder dev oder jedes dev team hat eine eigene (ich zähle dazu).
Dies ist meistens jedoch kein Problem, weil es cross compat libraries gibt, zu denen jeder sein system einfach hinzufügen kann.
Das pondon zur ServiceAPI sind bei uns Capabilities, anfangs eine hölle, inzwischen in soziemlich jeder Mod zu finden.
Was wir unter anderem einer guten Dokumentation verdanken, an der jeder mithelfen kann.
https://mcforge.readthedocs.io/en/latest/

Ganz ehrlich, ich sehe keine Möglichkeit die Server Community zu einer ähnlichen Einstellung zu bringen.
Dafür ist der Konkurrenzkampf meiner Erfahrung nach viel zu groß.
Wenn du aus dieser Atmosphäre rauß möchtest, bist du herzlich eingeladen der Modding Community beizutreten,
wir benötigen noch einige Forge alternative zu Plugins wie World Guard, oder economy systemen :3

Alternativ, wenn du dass wirklich umsetzen willst, und die Grundeinstellung der Plugin & Server Community ändern möchtest,
wäre mein Vorschlag, schau dich in der Modding Community um, PR einige standards in Spigot/Bukkit rein, und zwing die leute durch das entfernen veralteter Sachen dazu die neuen zu benutzen.
Ich kann dir aus eigener Erfahrung sagen, solang du dir keinen großen namen in der Scene machst, wirst du sowas nicht schaffen,
außer wenn du es direkt in Spigot einbaust.

P.s. ein großer teil des Problem ist die Abstraktion von Bukkit/Spigot.
Minecraft an sich bietet bereits sehr viele standards zur Daten Serialisieren,
so können Positionen direkt per NBT und JSON serialisiert werden und dass ohne viel Schnickschnack.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
24
Diamanten
212
Minecraft
FastFelix771
Andererseits ist mir allerdings bisher auch keine Lösung außer Vault begegnet, wo die Service API genutzt wird.
Und das ist extrem schade.
sk89q hatte da wirklich einen hellen Moment gehabt und zu der Bukkit API etwas sehr praktisches beigetragen.
Die Menge an verschiedenen APIs für die selbe Funktionalität lässt sich damit wunderbar reduzieren und als Entwickler kann man dadurch mit zahlreichen anderen Plugins arbeiten, ohne jedes Einzelne direkt anzusprechen.

ob ein solcher Aufwand von der Community geschätzt werden würde, oder ob trotzdem alle vor sich hin entwickeln.
Aufwand wurde, wird und wird auch weiterhin von der Community selten bis gar nicht geschätzt werden.
Und es wird auch immer eine Gruppe geben, die weiter vor sich hin basteln.
Allerdings gibt es unterm Strich auch immer welche die davon profitieren können - und idealerweise ist das dann die Mehrheit.

Die wenigen hochwertigen Plugins, die es gibt, bieten meistens auch gute Schnittstellen, die zwar nicht über die Service API laufen, aber dennoch leicht verwendbar sind und im Normalfall auch erstaunlich gut dokumentiert sind.
Das stelle ich auch nicht in Frage.
Vermutlich meinst du damit auch eher Plugins wie z.B. Placeholder-API die ihre "einzigartige" Funktionalität selbst bereitstellen.

Worauf ich mit der Service API abziele sind die sich stark ähnelnden Plugins die aber allesamt ihre eigene Extrawurst braten und meinetwegen auch ihre eigene noch so gut dokumentierte API bereitstellen.
Man nehme Essentials und seine 10.000 Kopien die umherschwirren.

Tun alle das gleiche, aber jeder stellt seine eigene Schnittstelle bereit für eben ein und die selbe Aufgabe.
Wenn man nun als außenstehender auf eine derartige Funktionalität zugreifen will, darf man drölf verschiedene APIs ansprechen - da wird man doch irre und lässt den Krampf bleiben.

Mit der Economy-Schnittstelle hat Vault da ja einen Meilenstein hingelegt bei dieser Problematik.
Und ich bin eben der Auffassung, dass man daran doch anschließen könnte und auch sollte.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
24
Diamanten
212
Minecraft
FastFelix771
Bei Plugins gibt es sehr viel kostenpflichtiges
Und das ist auch eine der schlimmsten Perversionen die dem Plugin-Ecosystem widerfahren sind.
Besonders, dass das so unreguliert stattfindet und gehandhabt wird.
Jeder Clown kann auf Spigot seinen Schrott einstellen, ein paar Euros den Leuten aus der Tasche ziehen und abdampfen.

Wenn es wirklich gute kommerzielle Software wäre mit dem entsprechenden (langfristigen) Service dahinter und auch der (schön wärs...) Garantie, dass ich ein funktionierendes Produkt kaufe, dann soll es ruhig etwas kosten - aber momentan gibt es kein "Premium" Plugin, dass ich mit wirklich gutem Gewissen kaufen oder empfehlen kann.

Und auch da wird der Fokus von Minecraft als Spiel wieder etwas verzogen.
Die Leute fangen stattdessen an das Spiel für sich zu kommerzialisieren.

Die Modder haben ja soweit ich das mitbekommen habe einfach ihre Patreon-Seite und das läuft doch auch ganz prima.
In der Hinsicht finde ich die Modding-Community weitaus fortschrittlicher und nicht so toxisch wie es mittlerweile die Plugin-Welt geworden ist.

Korrigiere mich bitte, wenn ich Quark laber, aber:
Das glückliche an den Mods ist vermutlich auch, dass sich die einzelnen Mods nicht so stark ähneln.
Die meisten Mods tun etwas Einzigartiges. Eigene Maschinen, eigene Fahrzeuge, Waffen, etc. pp.
Es ist alles besonders und speziell genug, so dass die Generatoren von IndustrialCraft nicht mit denen von Buildcraft konkurrieren, obwohl beide Strom erzeugen.

Google mal nach "Bedwars Plugin" und erfreu dich an den 600 Plugins die sich voneinander fast kein Stück unterscheiden und allesamt den selben Rotz bis auf ein paar Kleinigkeiten hier und da tun.
Aber Hauptsache alle von ihnen bringen ihre höchst eigene API mit.
Und Hauptsache alle weisen daraufhin, dass sie das "ultimative" bla bla beste XY Plugin on earth sind.

Da haben die Plugin Programmierer schon eine ordentliche Klatsche weg im Vergleich.

Aber auch bei moddern ist nicht alles friede freude eierkuchen. Es gibt Hunderte Libraries and API's,
so gut wie jeder dev oder jedes dev team hat eine eigene (ich zähle dazu).
Dies ist meistens jedoch kein Problem, weil es cross compat libraries gibt, zu denen jeder sein system einfach hinzufügen kann.
Das pondon zur ServiceAPI sind bei uns Capabilities, anfangs eine hölle, inzwischen in soziemlich jeder Mod zu finden.
Und eben solche cross compat Libs bzw. eine gescheite Einbindung von Service Schnittstellen fehlt.
Vault ist alleinstehend in dem Feld, obwohl anhand der Nutzer offensichtlich ist wie erfolgreich und nutzvoll das Konzept doch ist.

Wenn du aus dieser Atmosphäre rauß möchtest, bist du herzlich eingeladen der Modding Community beizutreten,
wir benötigen noch einige Forge alternative zu Plugins wie World Guard, oder economy systemen :3
Nur zu gerne manchmal.
Und eines Tages werde ich mich auch sicherlich mal an den einen oder anderen derartigen Mod setzen.

Ich kann dir aus eigener Erfahrung sagen, solang du dir keinen großen namen in der Scene machst, wirst du sowas nicht schaffen,
außer wenn du es direkt in Spigot einbaust.
Und ohne großen Namen wird man auch so schnell nichts in Spigot einbauen. :D
Zudem die Herren sich da ja (sehr) um Rückwärtskompatibilität bemühen, so abrupte Änderungen lassen die nicht zu.

Auf Spigot / Bukkit direkt als Wegweiser würde ich nicht bauen, viel zu bürokratisch und pingelig mittlerweile - die Service-API ist glücklicherweise weit genug vom Schuss weg, sodass die eigentlich nie wieder angefasst wurde seit der Erstellung und auch nicht angefasst werden muss in zukünftigen Spielversionen.
Also eine sichere Nische.

P.s. ein großer teil des Problem ist die Abstraktion von Bukkit/Spigot.
Minecraft an sich bietet bereits sehr viele standards zur Daten Serialisieren,
so können Positionen direkt per NBT und JSON serialisiert werden und dass ohne viel Schnickschnack.
Bukkit bzw. Spigot tut sich bloß schwer die vorhandene API zu verändern bzw. zu erweitern der Kompatibilität wegen.
Die könnten schon so viel mehr Fähigkeiten der Game Engine standardisiert haben in Bukkit.
Packets und co. zum Beispiel.

Die Idee der Abstraktion ist ja ganz toll, aber leider wurde eben mit der Weiterentwicklung des Spiels nur noch Bruchteile der verfügbaren Möglichkeiten in der Abstraktion abgebildet.
Hier und da gab es mal Erweiterungen bzw. Änderungen an der API, aber an sich blieb die Entwicklung fast schon stehen.
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
728
A standard that fits everyones use-case ist ja nicht das was ich möchte.
Das ist auch nicht möglich.
Ich möchte gerne mehr solcher Schnittstellen schaffen für andere Problemdomänen, außerhalb von Economy, Permissions und Chat.
Also diese Dinge hier widersprechen sich etwas.

- CRUD Operationen für einen globalen Spawn
- CRUD Operationen für per-world Spawns
Ich finds unnötig hier auf Beispiele einzugehen. Ich biete dir an eine API oder ein Design für eine beliebige nicht-trivale Sache zu skizzieren und ich geb dir tausend Dinge, die du damit nicht implementieren kannst. Für deine Spawnpunkte fällt mir zuerst permissionabhängige Spawns ein. Was ist wenn ich Spieler über Spawns verteilen will. Ich geb zu, ich versteh auch nicht ganz was du so ganz damit meinst. Aber wie gesagt, geb mir das System vor und ich finde haufenweise sinnvolle Anwendungen, die von deinem Standard nicht abgedeckt wird. Vault ist übrigens selbst bereits so ein System, denn nicht ohne Grund greifen Leute durchaus auch direkt auf LuckPerms zu. Wie es mit anderen Komponenten von Vaul aussieht weiß ich nicht, ich mach erstaunlich wenig Entwicklung mit Bukkit, vor allem bin ich nicht gerne von Libraries abhängig, bei denen der Fortbestand nicht unbedingt gesichert ist. Wo wir auch wieder bei Mojang wären, die keine stabile API garantieren, was ich heute mache, kann Morgen bereits nicht mehr funktionieren.

Aber ich bin mir nicht sicher ob wir an das Gleiche denken... hast du ein Beispiel für mich?
So ziemlich alles was irgendwie asynchron ist. Versuch z.B. beim Join Spielerdaten aus der Datenbank zu laden ohne den Mainthread zu blockieren. Oder versuche irgendwie das Chunkhandling selbst zu implementieren oder mit temporären Maps bzw. virtuellen Map (also ohne dass sie wirklich auf der Festplatte liegen) zu arbeiten.

Und das kann lediglich durch ausreichende Dokumentation, Aufklärung und Beispielen samt Lernmaterialien behoben werden.
Seien es verfluchte YouTube Tutorials oder Blogbeiträge oder Bukkitforum Threads oder sonst was.
Dokumentation muss man auch erstmal lesen lernen. Ich habs gelernt und viele andere Leute haben auch Programmieren gelernt. Entweder ist das Interesse da sich einfach mal über Softwaredesign zu informieren oder es ist halt nicht da. Es gibt auch Leute, für die Programmieren ein einfaches Hobby ist und die kein Problem damit haben, dass ihr Code nicht gut ist.

Tja, damit leben wir ja nun schon eine gewisse Zeit lang. Und das wird sich so schnell sicherlich nicht ändern.
Also ich sehe seit Jahren einen Stillstand und da hilft es auch nicht, dass immer wieder System A gegen System B ausgetauscht wird, da System A nicht mehr entwickelt wurde. Bukkit wurde seit 4 Jahren nicht mehr weiterentwickelt. Es wird noch auf die neuste Version gebracht und die neuen Features in die API eingebaut aber das wars. Die Features, die ich oben genannt werde könnte man z.B. einbauen, aber Mojang hatte nie Interesse das Chaos um die Lizenz zu klären, dass sie selbst ausgelöst hatten. Ansonsten würden einige Features aber auch mehr Erfahrung benötigen und dass Mojang an kommerziellen Projekten kein Interesse hat, haben sie klar bekundet. Nur ist das halt auch oft ein Antrieb für größere Projekte.

Dann müssen wir doch nicht mehr Müll drauf schütten oder?
Wenn die Codebase stinkt, dann kannst du das nicht mit noch mehr Code lösen.

Also zusammengefasst: Ich halte es für unrealistisch ein sinnvolles Set an Standardabstraktionen zu definieren, dass auch nur einen Teil von vielen Anwendungen umfasst. Der Aufwand für die Architektur wäre gewaltig. Es gäb keine Garantie, dass man mit dem nächsten Minecraft Update nicht alles neu machen muss. Großflächige Adaption ist unwahrscheinlich, weil es ggf. verlangt, dass bestehender Code umgeschrieben werden muss und die Gruppe, die du damit erreichen willst interessiert sowieso nicht dafür.

Und das Problem mit den vielen Essentialsclonen ist einfach, dass Essentials ein perfektes Beispiel für ein Stück Code ist, dass zu viel Funktionen hat. Ich würd mir auch 3x überlegen, ob ich wirklich Essentials benutzen möchte, wenn ich nur eine kleine Teilmenge seiner Funktionen brauch, denn ich hab selbst bereits innerhalb kurzer Zeit Dinge in Essentials gefunden, die mein Plugin kaputt gemacht haben, weil es eben zu viel tut.
 
Zuletzt bearbeitet:

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
439
Diamanten
229
Nachdem ich hier schon erwähnt wurde, klink ich mich auch mal ein:

Vor einiger Zeit hab ich mal einen Vortrag gesehen, bei dem es um solche Standards ging:

Ein Zitat daraus sollte die Situation relativ gut beschreiben:
Standards sind toll, jeder sollte mindestens einen haben.

Ich möchte nicht deine Idee schlecht reden, Standards sind wichtig und ich bin auch dafür, diese einzuführen. Doch inzwischen hat jedes Netzwerk seine eigenen Libs, Apis und Anforderungen, da einen gemeinsamen Konsenz zu finden, wird nicht ganz so leicht ;)
Mein erster Gedanke war eine einheitliche API für Minigames, damit Siege, Statistiken etc. für den Server einfach zur Verfügung stehen. Doch sowas dürfte es ja schon geben.

Ich glaube nicht, dass du dabei auch langjährig bestehende Netzwerke dazu bringen kannst, ihre Standards aufzugeben oder abzuändern, die sie bereits schon lange benutzen. Dass jeder Server seine eigenen Standards pflegt hat in diesem Fall sogar den Vorteil, dass einige wenige Netzwerke eine höhere Qualität erreichen, weil sie ihre Plugins selbst und koordiniert programmieren.

Btw: Vault hat in meinen Augen einen großen Nachteil:
Im Bezug auf das Update auf UUID-Kompatiblität steht folgendes im entsprechenden Github-Issue:
Vault can't update until all implemented plugins update. Its that simple.
Das ist ein Problem: Wenn du deine Schnittstelle erweitern - oder noch schlimmer: ändern möchtest, dann hast du jede Menge Arbeit, inkompatible Plugins und den Stress dahinter, den Leuten zu erklären, warum die Version x.x.x mit der Plugin-Version y.y.y nicht zusammenarbeiten möchte.
In anderen Bereichen spricht man da von inkompatiblen Änderungen. Einige Personen versetzen diese beiden Worte in ängstliche Zustände :p
 

FelixKlauke

Erzengel
Ehem. Teammitglied
Registriert
5 Januar 2014
Beiträge
1.038
Diamanten
249
Minecraft
FelixKlauke
TL;DR

Auch Vault hat sich nicht ganz so entwickelt wie du es beschreibst. Es war zuerst einfach ein Layer, der selbst alle Implementierungen auf Basis der jeweiligen Plugins bereit gestellt hat. Sieh dir zum Beispiel mal https://github.com/MilkBowl/Vault/tree/master/src/net/milkbowl/vault/chat/plugins an. In dem Sinne ist Vault keine Schnittstelle, die die meisten Permissions Plugins implementieren sondern einfach eine Library, die selbst nur auf entsprechende Libraries zugreift. Nur so konnte Vault überhaupt eine Reichweite aufbauen oder als "Standard" auftreten. Niemand hat sich um Vault geschert oder es implementiert und genauso würde es auch laufen, wenn du auf einmal neue "Standards" definierst. Und so wird es auch bleiben.

So nett die Idee auch ist, sie ist nicht umsetzbar.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
24
Diamanten
212
Minecraft
FastFelix771
So ziemlich alles was irgendwie asynchron ist. Versuch z.B. beim Join Spielerdaten aus der Datenbank zu laden ohne den Mainthread zu blockieren. Oder versuche irgendwie das Chunkhandling selbst zu implementieren oder mit temporären Maps bzw. virtuellen Map (also ohne dass sie wirklich auf der Festplatte liegen) zu arbeiten.
Dann denken wir absolut an das Gleiche. :D

Entweder ist das Interesse da sich einfach mal über Softwaredesign zu informieren oder es ist halt nicht da. Es gibt auch Leute, für die Programmieren ein einfaches Hobby ist und die kein Problem damit haben, dass ihr Code nicht gut ist.
Klar. Es gibt auch Leute die über ihren Tellerrand hinausschauen wollen und vielleicht sogar
in der Lage sind die deutlich bessere Lösung zu erkennen
aber nicht unbedingt dazu in der Lage sie auch from scratch umzusetzen.
Und warum nicht diese Leute unterstützen?

Abgesehen davon hat es auch Nutzen für Serverbetreiber, da diese potentiell mehr Plugins drop-in ersetzen können, bei Bedarf.

Also ich sehe seit Jahren einen Stillstand und da hilft es auch nicht, dass immer wieder System A gegen System B ausgetauscht wird, da System A nicht mehr entwickelt wurde. Bukkit wurde seit 4 Jahren nicht mehr weiterentwickelt. Es wird noch auf die neuste Version gebracht und die neuen Features in die API eingebaut aber das wars.
Und in der Plugin-Welt drehen die Leute allesamt ihr eigenes Ding noch dazu.
System A, B, C, D, E, F, ZXY

Also diese Dinge hier widersprechen sich etwas.
Hm, vielleicht drücke ich mich da einfach ungünstig aus.
Jahrelang hat das Economy interface für unzählige Plugins vollkommen ausreichend hingehalten.
Es stößt natürlich an seine Grenzen bei z.B. Item-based Economy oder wenn man mehrere virtuelle Währungen haben möchte.

Nun das sind aber auch nicht zwangsläufig die Interessen von 95%+ der Benutzer am Ende.
Diese Plugins müssten entsprechend ihren eigenen Kurs fahren, es ist unausweichlich, dass Software individuell ist. Kein Thema.
Aber dennoch deckt es ja den Großteil ab im Bereich Economy. (oder deckte ab*)

Und um auf Beispiele zu verzichten, sei schlicht gesagt, dass es auch andere Probleme gibt, dessen Lösungen sich zu 95%+ zusammenfassen lassen, was schlagartig dazu führen würde, dass man unabhängig von den restlichen verwendeten Plugins zwischen den 95% hin und her switchen könnte.
Die paar Speziallösungen werden immer da sein und sind auch nicht problematisch - die Gruppe die diese spezielle Lösung braucht, wird sich auch entsprechend auf eben diese einstellen. No problem here.

Ich würd mir auch 3x überlegen, ob ich wirklich Essentials benutzen möchte, wenn ich nur eine kleine Teilmenge seiner Funktionen brauch
+1
Und doch schleudern die Leute fast nur irgendwelche Komplettlösungen auf den "Markt".
Das wäre ein Punkt der sich reduzieren ließe.
Aber ja - das größte Problem ist und wird immer sein, dass natürlich eine gewisse Menge bei sowas mitziehen muss.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
24
Diamanten
212
Minecraft
FastFelix771
Vor einiger Zeit hab ich mal einen Vortrag gesehen, bei dem es um solche Standards ging:
Hat mir sehr gefallen, das Video. Dankeschön. :)

Doch sowas dürfte es ja schon geben.
Who knows.
Durch das Konkurrenzverhalten zwischen den Netzwerken und sogar einzelnen Entwicklern kommt es leider nur selten dazu, dass sowas nach außen dringt. Oder es kommen gleich 20 die sich den Kopf einklopfen gegenseitig.

Dass jeder Server seine eigenen Standards pflegt hat in diesem Fall sogar den Vorteil, dass einige wenige Netzwerke eine höhere Qualität erreichen, weil sie ihre Plugins selbst und koordiniert programmieren.
Exakt. Hinter verschlossenen Türen ist sowas ja Gang und Gebe.
Diese Gruppen haben aber auch meist ohnehin spezielle Anforderungen.
Wenn zwei größere Netzwerke ihre Standards vergleichen würden, täte keiner gewinnen, sondern ähnlich wie im Vortrag beschrieben (Netscape -/- MS => ECMAScript) eine Kombination entstehen, vermute ich.

Die große Menge an ... hm sagen wir "general-purpose" Minecraft-Servern bleibt dabei etwas auf der Strecke, da so eine Kombination nur äußerst selten entsteht - wenn überhaupt.

Das ist ein Problem: Wenn du deine Schnittstelle erweitern - oder noch schlimmer: ändern möchtest, dann hast du jede Menge Arbeit, inkompatible Plugins und den Stress dahinter, den Leuten zu erklären, warum die Version x.x.x mit der Plugin-Version y.y.y nicht zusammenarbeiten möchte.
In anderen Bereichen spricht man da von inkompatiblen Änderungen. Einige Personen versetzen diese beiden Worte in ängstliche Zustände :p
Ohja, das ist durchaus ein ernstes Problem.
Dazu habe ich mir bereits auch Gedanken gemacht und sogar brauchbare* Lösungen ausgearbeitet, jedoch beruht das darauf, dass vorgeschlagene Änderungen an Schnittstellen von einer Gruppe Menschen entsprechend ausgewertet wird und ggf. nicht in die aktuelle sondern in eine zukünftige Version aufgenommen wird.
Wie das aussehen könnte, kann ich gerne erörtern, aber für den Moment lass ich den Beitrag mal lieber kürzer gehalten. ;)
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
24
Diamanten
212
Minecraft
FastFelix771
Auch Vault hat sich nicht ganz so entwickelt wie du es beschreibst. Es war zuerst einfach ein Layer, der selbst alle Implementierungen auf Basis der jeweiligen Plugins bereit gestellt hat.
In dem Sinne ist Vault keine Schnittstelle, die die meisten Permissions Plugins implementieren sondern einfach eine Library, die selbst nur auf entsprechende Libraries zugreift. Nur so konnte Vault überhaupt eine Reichweite aufbauen oder als "Standard" auftreten. Niemand hat sich um Vault geschert oder es implementiert
Macht durchaus Sinn - die Leute wollen ja immer erst sehen, bevor sie sich anschließen.
Beziehungsweise die Entwickler wollen eine Begründung / Motivation für diesen Aufwand - Vault hat dies durch die Ermöglichung einer höheren Kompatibilität ergo mehr Reichweite erreicht bei einigen. Irgendwann.
Ich könnte mir sogar ebenfalls vorstellen ähnlich vorzugehen, jedoch würde ich eher "Brücken-Plugins" dafür einsetzen, die den Standard implementieren und die Implementierung simpel daraus besteht Plugin XY anzusprechen.
Bis diese von alleine nachziehen, falls sie das tun, ist das durchaus eine denkbare "Lösung" bzw. eine Möglichkeit.
Wenn auch nicht unbedingt schön.

So nett die Idee auch ist, sie ist nicht umsetzbar.
Weiträumig eher nicht vermutlich - zumindest eben für ein gewisses Zeitfenster.
Aber ich kann mir für ein paar Leute durchaus einen Mehrwert darunter vorstellen.

Ich bin nicht in der Erwartungshaltung, dass ich irgendwas ausarbeiten würde und es sofort jeder nutzt und hoch heiligt oder überhaupt jemand kennt / nutzt.
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
438
Minecraft
SirYwell
Wir haben hier auch nicht gerade eine große Reichweite leider, um uns ein Bild darüber zu verschaffen, wie die Mehrheit der Entwickler (und auch der Anfänger) darüber denkt.

Gerade für Anfänger wäre es aber sicherlich interessant, wenn man sie direkt an die Verwendung solcher Schnittstellen heranführt und wenn man damit qualitativ auch die typischen Tutorials übertrifft (sollte ja eigentlich nicht so schwer sein, benötigt aber natürlich Zeit), könnte man sicherlich den ein oder anderen dazu motivieren, die Schnittstellen im größeren Stil zu verwenden.

"Alteingesessene" Entwickler müsste man vielleicht eher über das Spigot-Forum ansprechen oder direkt auf sie zugehen. Sicherlich würden sich darunter auch welche finden, die an der Entwicklung solcher Schnittstellen mitwirken würden.

Um das ganze aber wirklich sinnvoll aufzubauen, müsste man allerdings wirklich sehr viel Vorarbeit leisten.
 
D

deleted196100

Guest
Ich glaube eine Standardisierung könnte man am besten erreichen indem man umfangreiche Tutorials für Anfänger erstellt, da diese das Wissen was in den Tutorials vermittelt wird höchstwahrscheinlich in ähnlicher Form für ihre Projekte weiterverwenden werden.

Es könnte auch helfen eine Art Standartbibliothek zur Entwicklung von Plugins zu erstellen die in den Tutorials aufgegriffen wird. Diese Bibliothek(en) könnten dann Beispielsweise das erstellen von Inventar "GUIs", Configverwaltung usw. abdecken.

Ich würde vorschlagen erst mal Themen zu sammeln zu denen Tutorials bzw. Bibliotheken geschrieben werden müssten.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
24
Diamanten
212
Minecraft
FastFelix771
Es könnte auch helfen eine Art Standartbibliothek zur Entwicklung von Plugins zu erstellen die in den Tutorials aufgegriffen wird. Diese Bibliothek(en) könnten dann Beispielsweise das erstellen von Inventar "GUIs", Configverwaltung usw. abdecken.
Für sowas wären solche Schnittstellen ebenfalls prima.
Dadurch kann man triviale Aufgaben in Module abspalten, welche ihre spätere Referenzimplementierung erhalten, aber auch von Dritten durch eine custom Implementierung ersetzt werden kann.
Und sollte ich in meinem trivialen Inventory-GUI Code einen Fehler aufspüren, renne ich nicht panisch durch drölf Codebases, sondern bringe bloß das eine Modul in Ordnung - da ja alle anderen Module / Plugins lediglich auf der Schnittstelle aufbauen.
Das machen ja die meisten irgendwann über eigenen Libraries, jedoch gibt es eben auch da Fallgruben - ich darf z.B. nicht die Lib direkt in den Code importieren, sonst renne ich nämlich dennoch um überall die aktuelle Version einzupflegen.
Und ich darf beim Editieren der Library nicht versehentlich das, von den darauf aufbauenden Plugins erwartete, Verhalten der Library verändern.

ch glaube eine Standardisierung könnte man am besten erreichen indem man umfangreiche Tutorials für Anfänger erstellt, da diese das Wissen was in den Tutorials vermittelt wird höchstwahrscheinlich in ähnlicher Form für ihre Projekte weiterverwenden werden.
Wie @JTK222 ja schon geschrieben hat, kann eine ausführliche Dokumentation und eine Sammlung an nützlichen Hilfestellungen viel ausmachen.
Bestenfalls mit entsprechenden Beispielen etc.

Ich würde vorschlagen erst mal Themen zu sammeln zu denen Tutorials bzw. Bibliotheken geschrieben werden müssten.
Klingt gut.
Eine kleine Sammlung die den Anfang bildet mit entsprechenden Anleitungen, Beispielen und Referenzimplementierungen würden Anfängern und auch Fortgeschrittenen sicherlich sehr helfen.

Wo wäre deiner Meinung nach ein geeigneter Ort um Themen zu sammeln?
GitHub oder eher sowas in Richtung Trello?
 
D

deleted196100

Guest
Wo wäre deiner Meinung nach ein geeigneter Ort um Themen zu sammeln?
GitHub oder eher sowas in Richtung Trello?
Ich würde zu Github/Gitlab tendieren. Das macht es einfach die Tutorials mit funktionierenden Beispielen zu verbinden. Änderungen kann man dann leicht über einen Pull Request realisieren.

Ein Discord bzw. Teamspeak wäre sicherlich auch Praktisch zur Koordination, um nicht für alles ein Issue zu erstellen.
 

BloodSKreaper

Vorarbeiter
Registriert
12 Oktober 2014
Beiträge
249
Diamanten
216
Minecraft
BloodSKreaper
Guten Abend miteinander,

ich selber zähle mich noch zu Programmier-Anfängern, wenngleich ich bereits seit ein zwei Jahren hobbymäßig Minecraft-Plugins programmiere. Natürlich habe ich mich mit Programmieren auseinandergesetzt, aber oftmals nur soweit, dass ich meinen Stuff, den ich erledigen wollte auch erledigen kann. Dementschprechend sind mir Konzepte wie Interface zwar bekannt, aber damit arbeiten tu ich eigentlich nicht.
Folgendes ist meine private Meinung und kann nicht verallgemeinert werden.
Was ich damit sagen will ist, dass mir diese Interfaces so gut wie nichts bringen würden, da ich sie schlicht und ergreifend nicht verwenden würde. Ein weiteres Problem sehe ich darin, dass es schwer sein dürfte solche Interfaces zu etablieren. Und wenn man etwas nicht kennt, dann verwendet man es auch nicht. Folglich wäre eine große Werbeoffensive für diese Schnittstellen nötig und ich glaube nicht, dass jemand für ein Spiel, das seine besten Tage hinter sich hat, so viel Zeit investieren würde. Meiner Meinung nach bräuchte jeder Anfänger ersteinmal eine Hinführung zu dem Thema bzw. zu dem Konzept Interface generell, bevor so eine Realisierung sinnvoll ist.
Fazit: ich sehe in solchen Interfaces keinen Nutzen.

Freundliche Grüße
BloodSKreaper
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
24
Diamanten
212
Minecraft
FastFelix771
Meiner Meinung nach bräuchte jeder Anfänger ersteinmal eine Hinführung zu dem Thema bzw. zu dem Konzept Interface generell
Das wäre dann ein Basic Java Tutorial und davon gibt es bereits zahlreiche - sowohl qualitative als auch totalen Schrott.

Hilfreiche Anleitungen und Beispiele zur Anwendung solcher Schnittstellen wären auf jeden Fall vorgesehen um eine Einführung in dieses alternative Konzept für Bukkit Plugins zu ermöglichen und den Umstieg zu erleichtern.

Allerdings muss jeder selbst entscheiden, wie weit er sich mit der Materie "Programmieren" auseinandersetzen will.

Es ist besonders bei Anfängern mit einer gewissen Lernkurve verbunden, jedoch lässt sich diese durch entsprechende Ressourcen wie Doku, Tutorials und Beispielen sehr viel angenehmer gestalten.
Manchmal muss man über seinen Tellerrand hinausgucken, wenn man neue Dinge schaffen will - z.B. wenn man von der Welt der Packets erstmal in die Hölle der Reflections gelockt wird.

Und irgendwann stellt man sich bestenfalls nicht mehr nur die Frage "Wie kriege ich meinen Stuff hin?", sondern viel eher "Wie kriege ich meinen Stuff effizienter, simpler und sauberer hin?".
 

AmeliaPond

Minecrafter
Registriert
12 Mai 2018
Beiträge
19
Alter
26
Diamanten
151
Minecraft
AmeliaPond
In der deutschen Minecraft Szene wirst du nicht genug offenen Geist dafür finden. Der gewöhnliche Deutsche mag Veränderungen nicht. Oft gibt es hier nur Hobby Programmierer. Dementsprechend flüssig sind viele auch im Bereich Fortgeschrittene Programmierkonzepte für Anfänger.

Mal abgesehen davon: Bei trivialen Dingen ist es nicht möglich Standards zu entwickeln.

Um einen neuen Standard, egal in welchem Bereich, musst du es erstmal hinbekommen, dass die Großen das mitmachen. Wenn die großen nicht mitmachen besteht nur eine minimale Chance einen neuen Standard zu verbreiten.
 
Oben