Wunsch: Installation von Plugins - Leichtere Methode, wenn Plugins andere Plugins benötigen

  • Hallo red51 ,


    gibt es eine Möglichkeit zu sagen, wenn ein Plugin ein anderes Brauch, dass das Plugin dann auf das andere wartet.


    Ich stelle mir eine onLoad()-Event, da wo man das Plugin bereit für andere vorbereiten kann oder in der plugin.yml ein Bereich, die sagt, welches Plugin muss als erstes geladen werden.


    Oder evtl. ein Config, wo man die Reihenfolge bestimmt.


    Wenn man nämlich ca. 10 - 20 Plugins irgendwann installiert hat und manche Plugins andere Brauchen, es sehr schwer ist, die Reihenfolge im Plugins-Ordner festzulegen.

    Es sollte am besten so sein, dass wenn man ein Plugin hinzufügt, dass Rising World die reihenfolge der Plugins selbst findet, indem es erst alle lädt, damit es weiß, welche Plugins da sind und dann erst die onEnabled() ausführt.

  • Ich stelle mir eine onLoad()-Event, da wo man das Plugin bereit für andere vorbereiten kann oder in der plugin.yml ein Bereich, die sagt, welches Plugin muss als erstes geladen werden.

    Es gibt tatsächlich bereits eine onLoad() Methode: Diese wird exakt dann aufgerufen, wenn das Plugin geladen wird (zu dem Zeitpunkt sind andere Plugins noch nicht unbedingt geladen). Die onEnable() Methode hingegen wird erst aufgerufen, wenn alle Plugins geladen sind ^^


    Das Problem bei den Abhängigkeiten ist aber, dass sobald eine Klassenvariable oder eine statische Variable direkt ein Objekt erzeugt (diese also nicht erst in onEnable() erzeugt werden), ein Fehler geworfen wird wenn das entsprechende Plugin noch nicht geladen ist. Das lässt sich leider nicht verhindern (schließlich weiß Java an der Stelle ja noch nichts von diesem Objekt, kann also seinen Konstruktor oder eine seiner Methoden nicht aufrufen). Man kann das Problem aber umgehen, indem keine fremden Objekte erstellt oder Methoden aufgerufen werden, bevor onEnable() aufgerufen wurde.


    Wir könnten ggf. eine Option hinzufügen, mit welcher man die Reihenfolge festlegen kann, in der ein Plugin geladen wird. Dem Plugin also einen Wert geben (und alle Plugins werden anhand dieses Wertes sortiert, d.h. ein kleiner bzw. negativer Wert führt dazu, dass ein Plugin früher geladen wird, ein höherer Wert dazu, dass es später geladen wird). So könnte man den Plugins, die von anderen Plugins benutzt werden, einen möglichst kleinen Wert geben (zB -1000), und dem Hauptplugin einen höheren Wert (Standard 0 oder eine höhere Zahl) :thinking:

  • Das hört sich doch nicht schlecht an. Auf jeden all muss man irgendwie eine Lösung finden. Weil als Admin stehst du später völlig Orientierungslos da, da du 20 Plugins installiert hast und die hälfte davon andere Plugins brauchen, die wiederum andere Plugins brauchen usw. :dizzy::drunk:

  • Also wir werden zumindest im nächsten Update einen Wert loadorder einbauen, was optional in die plugin.yml eingetragen werden kann. Wenn nicht angegeben, ist der Wert automatisch auf 0 gesetzt (und Plugins mit identischer loadorder wenn wie gewohnt alphabetisch geladen). Beim Spiel- bzw. Serverstart werden die Plugins sonst abhängig von ihrer loadorder geladen, d.h. eine niedrige loadorder führt dazu, dass das Plugin früher geladen wird. Wenn ein Plugin also hauptsächlich eher als Library fungiert, kann diesem Plugin direkt ein sehr kleiner Wert verpasst werden (zB -1000000). Einem Plugin, welches viele Abhängigkeiten zu anderen Plugins hat, könnte man vorsorglich einen hohen Wert geben.


    In den meisten Fällen sollte das eigentlich schon helfen ^^ Die loadorder wird zwar vom Pluginersteller gesetzt (da ja in der plugin.yml festgelegt), aber wenn dort im Vorfeld sinnvolle Werte gewählt werden (wie zB oben erwähnt), sollte das i.d.R. passen. Nur, wenn ein Plugin wirklich extrem viele Abhängigkeiten zu anderen Plugins hat, und alle Plugins von unterschiedlichen Entwicklern stammen, könnte das vmtl. an die Grenzen stoßen.

Participate now!

Don’t have an account yet? Create a new account now and be part of our community!