Plugin API - Wehre schön, wenn & Fehlerberichte - It would be nice, if & bug reports

  • :nerd:ich habe einen Workaround gefunden, ich Phase mir die Steam Profiel Seite nach dem Profielbild, das ist allerdings recht Internet lastig und das Phasen dauert auch seine Zeit||


    Code
    Document doc = Jsoup.connect("https://steamcommunity.com/profiles/"+resultDB.getString("uid")).get();
    Elements newsHeadlines = doc.select("img");
    for (Element headline : newsHeadlines) {
    if ( headline.absUrl("src").contains("_full") && !headline.absUrl("src").contains(".gif") ) {
    url = headline.absUrl("src");
    }
    }
    if (url!=null) image = TextureAsset.loadFromURL(url); else image = null;


    ^^also wenn es zu Umfangreich wird, das Spielerbild vom Spile zu bekommen, dann Bitte gaz hinten mit auf die Liste.

  • :saint: red51, du hast doch zugriff auf einiege Steam Daten, zumindestens die ID und das Profielbild.

    Leider ist das etwas komplizierter :saint: Das Spiel hat über die Steam API tatsächlich Zugang zum Avatar, das Problem ist aber leider, dass der Server das nicht hat (bzw. Steams GameServer API keine Funktionen dafür bietet, sofern ich nichts übersehen habe)... die Plugin API kann also nicht direkt die Steam-API verwenden. Würde die Plugin API stattdessen clientseitige Funktionen zum Auslesen des Avatars verwenden, würde das nur im Singleplayer klappen, nicht aber im Multiplayer (wenn die API auf einem Server läuft). Hinzu kommt aber leider auch, dass das dann nur bei Steam-Usern funktionieren würde...


    Ggf. wäre es überlegenswert, dass der Client künftig sonst einfach selbst seinen Avatar an den Server sendet. Dann könnte sowas natürlich auch über die API zugänglich gemacht werden. Ich packe das mal auf unsere Liste. Spätestens wenn das Spiel das irgendwofür benötigt (um zB die Avatare in der Spielerliste anzuzeigen o.ä), würden wir sowas einbauen ^^

  • red51 sag mal, hast du bei den Plugin's ein *.rar Loader eingebaut?
    War das schon immer da?


    Ich hatte die Arcive im Plugin Ordner (Das letzte Tiefgreifende ändereung war Ordner Umbenennen) mein Update Verlauf.
    Ich konnte meinen Server nicht mehr starten:

    was ich mir erstmal nicht erklären konnte und immer noch ein ? hat.


    Mein Bauch gefühl hat mir gesagt "Verschiebe mal die RAR's" und siehe da es läst sich wieder ohne Probleme Starten. Meine Vermutung liegt auf der Ordner Umbenennung und es gab dann Real den "ToolsAPI" ordner und im RAR den "0ToolsAPI" mit dem gleichen Plugin :thinking:

    Ich fande das Phenomän recht seltsam und wollte dir das mal Berichten.

  • Noch eine kleinigkeit :D kannst du die Anzeige für die Areas noch etwas Optiemieren, so das zwei Areas die direckt an ein ander Liegen nicht mehr so Flackern. Das müsste doch auch mit diesem leichten Versatz klappen?

  • red51 sag mal, hast du bei den Plugin's ein *.rar Loader eingebaut?

    Nein, eigentlich nicht :wat: Lädst du das Plugin via .jar, oder direkt die class-Dateien (oder compilierst du das Plugin on-the-fly mit einer "projectinfo.txt")? Das Spiel versucht beim Laden die Loadorder zu bestimmen und prüft im Grunde diese 3 Fälle. Problematisch wird es, wenn bspw. mehrere .jar Dateien in einem Plugin-Ordner vorhanden sind, oder wenn es eine zusätzliche classinfo.txt gibt, oder wenn eine zusätzliche projectinfo.txt existiert.


    Gibt es denn an sich immernoch Probleme mit der Loadorder (wie hier erwähnt)?


    Noch eine kleinigkeit :D kannst du die Anzeige für die Areas noch etwas Optiemieren, so das zwei Areas die direckt an ein ander Liegen nicht mehr so Flackern. Das müsste doch auch mit diesem leichten Versatz klappen?

    Oh, danke für den Hinweis, ja, das können wir mit dem nächsten Update anpassen :)

  • Nein, eigentlich nicht :wat:

    :thinking:Mysteriös
    Ich benutze den*.jar Loader:Din die anderen Beiden Sachen habe ich mich noch nicht eingearbeitet (was der Bauer nicht Kennt:saint:)

    Vieleicht war das auch etwas mit NetBeans, jedenfalls klappt es jetzt wieder

    Gibt es denn an sich immernoch Probleme mit der Loadorder (wie hier erwähnt)?

    Nein, bislang alles Super mit der Loader Reienfolge:thumbup:


    mit dem nächsten Update

    :love:

  • :thinking: Mysteriös

    In der Tat :monocle: Das deutet aber tatsächlich eher auf einen (versteckten) Bug im Spiel hin. Die Meldung Comparison method violates its general contract! kommt beim bestimmen der Loadorder. Ich vermute, dass während des Sortierens der Plugins plötzlich eine andere Loadorder für ein Plugin erkannt wird (warum auch immer)...


    Wenn das nochmal auftritt oder du einen Weg findest, das zu reproduzieren, lass es mich bitte wissen :)


    Ich benutze den*.jar Loader :D in die anderen Beiden Sachen habe ich mich noch nicht eingearbeitet (was der Bauer nicht Kennt :saint: )

    Also falls du an Plugins lokal auf deinem Computer arbeitest, dann ist die Variante mit dem dynamischen Kompilieren (über eine "projectinfo.txt") am Schnellsten :saint: Du kannst dann (während das Spiel läuft) einfach eine Änderung am Code vornehmen und musst im Spiel dann nur rp eingeben zum Neuladen - das Spiel kompiliert das Plugin dann selbst neu und kopiert alle nötigen Daten. Der Vorteil ist im Prinzip der, dass du nicht selber kompilieren und keine Dateien verschieben musst. Ist im Grunde ein bisschen wie ein Hot-Reload ^^


    Um das zu verwenden, musst du alle .jars aus dem Plugin-Ordner im Spiel entfernen und dann dort stattdessen eine "projectinfo.txt" anlegen. Darin wird der name des Plugins angegeben, der path (Pfad zum "src" Ordner deines Plugin-Projekts), optional noch libs (Pfad zum Ordner der die nötigen Libs enthält - bei Bedarf mit Semikolon getrennt) und optional auch eine loadorder. Name und Wert ist durch einen Doppelpunkt getrennt. Falls dein Plugin Assets verwendet, kannst du darin auch assets angeben mit dem Pfad zum Asset-Ordner (auch hier optional mit Semikolon getrennt, falls es mehrer Asset-Ordner gibt).


    Der Inhalt der .txt Datei kann dann zB so aussehen:

    Code
    name: TestPlugin
    path: C:\Users\Name\Projects\Rising World\TestPlugin\src
    libs: C:\Users\Name\Projects\Rising World\ToolsAPI
    loadorder: -100


    Nein, bislang alles Super mit der Loader Reienfolge :thumbup:

    Das freut mich zu hören, dass das soweit klappt! :thumbup:

  • Wenn das nochmal auftritt oder du einen Weg findest, das zu reproduzieren, lass es mich bitte wissen

    :saint:ich kann das Reproduzieren:Dich muss nur mein TMP Inhalt wieder ins Pluginverzeichnis Verschieben:lol:
    Wenn du das auch mal Probieren möchtest kann ich dir hier den Kompletten Plugin Ordner anbieten8)(PW: risingworld)


    die Variante mit dem dynamischen Kompilieren

    Ich habe das mal Kurz getestet, am Grenzstein Projekt, das hat soweit erstmal ganz gut Geklappt.

    Auch eine schöne sache, das du einen Compiler integriert hast:wow:

    Nur ist mir aufgefallen, das dann alle Daten in den Plugin Ordner "GrenzStein" Kopiert werden:thinking:allerdings habe ich unter NetBeans den Packaging - Exclude From JAR "**/*.java,**/*.form,**/.*.*,**/*.blend,**/*.blend1,**/*.mtl,**/*.svg,**/*.xcf" benutzt:saint:das wird nicht Berücksichtigt und ich habe auch einieges in Unterordnern die werden dann auch Komplet Kopiert.
    Ich müsste da erstnoch mehr Testen:thumbup:

    Code: projectinfo.txt
    name: GrenzStein
    path: ...\Projekte\RW Unity\Plugin\GrenzStein\src
    libs: ...\SteamLibrary\steamapps\common\RisingWorldDedicatedServer\Plugins\ToolsAPI
    assets: ...\SteamLibrary\steamapps\common\RisingWorldDedicatedServer\Plugins\GrenzStein\Assets

    bei libs gehe ich auf das Plugin, oder besser aus dem ...\RW Unity\Plugin\GrenzStein\dist\lib Ordner?
    bei assets habe ich den Ordner in Plugin angegeben, oder hier aus dem ProjecktRW Unity\Plugin\GrenzStein\src\resources\assets? Ber das ist ja eigendlich schon im path mit drinn:thinking:

  • :saint: ich kann das Reproduzieren :D ich muss nur mein TMP Inhalt wieder ins Pluginverzeichnis Verschieben :lol:
    Wenn du das auch mal Probieren möchtest kann ich dir hier den Kompletten Plugin Ordner anbieten 8) (PW: risingworld)

    Vielen Dank für den Upload! :):thumbup: Ich kann das Problem nun ebenfalls bei mir reproduzieren. Offenbar tritt des dann auf, wenn sich nicht nur Plugins im Plugin-Ordner befinden (wie in dem Fall die .rar Dateien). Wir werden das mit dem nächsten Update beheben ;)


    Wenn du möchtest kannst du sonst auch diese Runtime.jar ausprobieren. Kopiere die einfach nach /Data/Java und ersetze die bestehende Datei dort.


    Ich habe das mal Kurz getestet, am Grenzstein Projekt, das hat soweit erstmal ganz gut Geklappt.

    Auch eine schöne sache, das du einen Compiler integriert hast :wow:

    Freut mich, dass es soweit funktioniert ^^


    Nur ist mir aufgefallen, das dann alle Daten in den Plugin Ordner "GrenzStein" Kopiert werden :thinking: allerdings habe ich unter NetBeans den Packaging - Exclude From JAR "**/*.java,**/*.form,**/.*.*,**/*.blend,**/*.blend1,**/*.mtl,**/*.svg,**/*.xcf" benutzt :saint: das wird nicht Berücksichtigt und ich habe auch einieges in Unterordnern die werden dann auch Komplet Kopiert.

    Ja, leider werden Projekteinstellungen der IDE nicht berücksichtigt... grundsätzlich wird die IDE gar nicht erst eingebunden, sondern die Java-Dateien unter src direkt kompiliert. Die Sache ist, dass beim Kompilieren "on-the-fly" generell gar keine .jar Datei generiert wird, sondern nur einzelne .class Dateien...


    bei libs gehe ich auf das Plugin, oder besser aus dem ...\RW Unity\Plugin\GrenzStein\dist\lib Ordner?

    Die Dateien bzw. der Ordner, der unter libs angegeben wurde, wird beim Kompilieren rüberkopiert. Du kannst da ganze Ordner oder auch einzelne Dateien (mit Semikolon getrennt) angeben.


    bei assets habe ich den Ordner in Plugin angegeben, oder hier aus dem ProjecktRW Unity\Plugin\GrenzStein\src\resources\assets? Ber das ist ja eigendlich schon im path mit drinn :thinking:

    Auch wenn das bereits bei path angegeben wurde, müsstest du das für Assets erneut angeben. Denn die Angabe path berücksichtigt nur Java-Dateien ;) Alles, was bei assets angeben wurde, wir nochmal separat rüberkopiert.

  • red51 wo du an anderer Stelle am PostProzess bist, der Text3D macht noch kleinere Probleme:


    Unterwasser wird "AlwaysVisible" noch mit Ausgeblendet, sonst ein sehr schöner Efeckt.
    Überwasser sieht es wieder wie gewollt aus.

    Es scheint auch auf nicht Sichtbares, und Glas im algemeinen einen Efeckt auf die Schrift zu haben.


    ### EDIT ###

    Bei Nebel wird der Text auch noch beeinflusst trotz AlwaysVisible :)


    Im Modus nicht immer Sichtbar, scheint alles gut zu klappen:

    OKe, durch Wasser könnte vieleicht noch was Inovation vertragen:saint:

  • Hallo,

    sorry das nochmal auszugraben aber was wurde aus der Diskussion mit der json lib? Ich vermute das steht immer noch auf der Liste?

    https://github.com/stleary/JSON-java ist übrigens "Public Domain" das hauen mir die Anwälte in der FIrma immer um die Ohren weil s das in Deutschland so nicht gibt. Ob das natürlich hier ne Rolle spielt is ne andere Frage.

    Ne Alternative wäre die google Version:

    https://gitgub.com/google/gson die steht explizit unter Apache-2.0


    Hintergrund meiner Frage is das ich in meinem Plugin auch gerne json nutzen würde aber in Kombination mit ToolsAPI is das irgendwie ne wackelige Geschichte. Is vermutlich nicht gedacht das man das dort geladene jar von nem anderen Modul aus nutzt.

  • ToolsAPI is das irgendwie ne wackelige Geschichte

    Ja, ich habe da Versucht selber einen JSON zu erswtellen nach einer Klassen Struktur. Das ist erlich noch etwas Unrund.

    Es gab bei YMAL die Möglichkeit eine Klasse zu definieren mit einfachen Klassen (int, float, String, Boolean, [], List, Map, HashMap) die dann in eine Datei geschrieben wurden. So etwas wollte ich mit JSON machen.


    Ja ich wollte Googl Bausteine Vermeiden und hatte auch nicht viel gesucht.

    Ich müsste mich noch mal dran setzen und mir https://github.com/stleary/JSON-java mal ansehen :thumbup:

    Wenn du damit schon ausreichend Erfahrung gesammelt hast, und du mir dabei Helfen möchtest, müssen wir nur noch Zeit finden um uns zusammen zu setzen :nerd:

  • Ich hab ehrlich gesagt auch mit beiden Varianten keine echte Erfahrung, hab in letzter zeit mehr mit Python gearbeitet. Dort is es n Traum mit json basierten Datenstrukturen zu arbeiten. Gson is da näher dran als die anderen Varianten, aber es is jetzt nicht so viel besser das ich da ne Präferenz setzen würde.


    "wackelig" soll jetzt keine Kritik sein, ich hab s bisher nicht genug getestet um ausschließen zu können das es an meinem Code liegt, oder aber auch dem json Code. Jedenfalls hab ich seit ich den json Part eingebaut hab immer wieder sporadisch den Effekt das risingworld in nen java Exceptionloop rennt. Leider in irgend einer grundlegenden Funktion die nicht direkt nem Plugin zugeordnet werden kann.

  • red51 ist das Absicht das ich den Vector3f nicht Clonen kann?


    Wenn es nicht zu Internen Problemen kommt, hätte ich gerne einen zugang dazu:saint:


    OKe, es geht auch so Vector3f currentPoint = new Vector3f(startPoint); aber vileicht doch den clone^^

  • red51 ist das Absicht das ich den Vector3f nicht Clonen kann?

    Es gibt leider tatsächlich keine clone() Methode für Vector3f (oder auch andere API-Objekte). Was du da siehst ist die clone() Methode die von "Object" bereitgestellt wird, also direkt von Java (und die ist nicht public).


    Klonen (über die clone()-Methode) ist in Java nicht gut umgesetzt, weshalb wir es generell in der API vermieden haben (keine unserer Klassen implementiert die clone() Methode). Es wird im Java-Umfeld allgemein eher abgeraten, clone() zu verwenden...


    Die Vector3f Klasse bietet daher stattdessen eine copy() Methode an, die quasi genau das macht, was du suchst: Vector3f currentPoint = startPoint.copy();


    Oder alternativ direkt einen neuen Vektor erzeugen und den alten als Parameter dem Konstruktur übergeben, wie du es in deinem Beispiel auch getan hast ;)


    Wenn du den Vektor für eine Addition oder Multiplikation o.ä. benötigst, dann kannst du auch die add(), mult() etc. Methoden ohne "Local"-Suffix benutzen - die erstellen immer einen neuen Vektor (während alle "Local" Methoden die bestehende Instanz verändern, ohne einen neuen Vektor zu erstellen). D.h. zB Vector3f result = startPoint.add(4f, 5f, 0f); gibt einen neuen Vektor zurück (und "startPoint" bleibt unverändert), während startPoint.addLocal(4f, 5f, 0f); direkt "startPoint" verändert und keinen neuen Vektor erstellt.

Participate now!

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