Projekt Shoebill 1.2 - Schreibe Gamemodes in Java

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Saintsbury: Wie maddin schon beschrieben hat, ist das die Event-Variable. In Java 8 wurden so genannte Lambda-Expressions eingeführt, und Shoebill macht davon in vielen Bereichen Nutzen.
    Es ist dir überlassen ob du die neuen Funktionen von Java 8 in deinem Code verwendest, früher hätte das Codebeispiel so ausgesehen:


    Java
    eventManagerNode.registerHandler(PlayerUpdateEvent.class, new EventHandler<PlayerUpdateEvent>() {
                @Override
                public void handleEvent(PlayerUpdateEvent event) throws Throwable {
                    Player player = event.getPlayer();
                    //Und so weiter
                }
            });

    Du siehst das die Lambda-Expressions den Code sauberer und einfacher halten. Ich werde die Codebeispiele und Events so schnell wie möglich nach kommentieren.


    //Edit:


    Ich habe heute angefangen einen Wrapper-Generator für Shoebill zu erstellen, welcher Javacode aus einer Include-Datei generieren kann. Im Moment funktioniert er noch nicht hundertprozentig korrekt, aber ich habe heute erst angefangen daran zu arbeiten, und der Code ist noch sehr durcheinander und funktioniert wahrscheinlich nicht immer so wie er sollte (auch wenn man schon ca. 90% der FCNPC.inc zu Java konvertieren kann). Hier könnt ihr ihn euch ansehen:


    https://github.com/Shoebill/wrapper-generator


    Der Generator generiert drei Dateien, welche die Funktionen beinhalten die die nativen Funktionen von dem Plugin aufrufen können. Außerdem werden die Callbacks automatisch gehookt.


    //Edit (4.4.16):




    Ich habe grade einen Projektgenerator erstellt, mit dem man ganz einfach und unkompliziert vollständige Maven Projekte für Shoebill erstellen kann. Das Tool ist einfach zu verwenden und erlaubt es einem, schnell ein Projekt zu erstellen. Nach dem das Projekt erstellt wurde, kann es in die IDE importiert werden, und dort bearbeitet werden.


    Hier eine kleine Vorschau:



    Download:

    2 Mal editiert, zuletzt von 123marvin123 () aus folgendem Grund: Projektgenerator

  • Was mich daran interessiert sind nicht nur die neuen Möglichkeiten, sondern auch sowas wie Multithreading.


    Ist damit Multithreading, wie man es aus Java kennt, möglich?


    Ich frage es deswegen, weil es bereits ein Multithreading plugin für pawn gibt, welches jedoch nicht einfach so ohne risiken benutzt werden kann, da pawn nur für singlethread designed ist.


    Ist es also nun wirklich möglich? Kann ich also ganz normal alles was in Java möglich ist auch wirklich so nutzen?

  • Ja Multithreaded ist damit möglich du musst die das ganze wie ein Plugin vorstellen, Shoebill läuft paraellel zum Server und kommuniziert lediglich über Schnittstellen mit dem Server und damit auch mit diesem Prozess.

  • Genau, es läuft mit einer kompletten JVM Engine und knüpft mit Schnittstellen an SAMP an. Um aber Multithreading dann auch umzusetzen, gibts auch eine Funktion, die du dann in einem neuen Thread nutzen solltest (zB auch in eigenen Timern, falls du nicht dir von Shoebill benutzt): Shoebill.get().runOnSampThread(() -> { ... });

  • Heyho, ich weiß die frage klingt wahrscheinlich echt dumm aber ich wollte 2 Dinge fragen:


    1. Was ist der vorteil eines Player Lifecycle Objects? Theoretisch könnte man es doch auch mit eigenen Objekten machen.


    2. Die wohl dämlichere frage :D
    Wie bekomme ich den shoebill streamer auf den Server und in mein Dev Env? ^^
    Hab da so meine Schwierigkeiten mit github und die fehlende Dokumentation macht es echt nicht einfacher :(


    Vielen Dank im vor raus!

  • 1. Hast du zufällig einen Link zu der Seite wo das genau steht :) ? Weil aus dem stehkreis hinaus würde ich behaupten das dieses Objekt einfach, wie bei der Verwendung des PVar -Systems von SAMP gelöscht werden nachdem der Spieler den Server verlässt ;). Daher wäre der einzige unterschied das der Speicherplatz eigenständig wieder freigegeben wird zu einem eigenen Objekt.


    2. Da kann dir glaub ich am besten Alf21 weiterhelfen

  • 1. Genau @'IPrototypeI, so habe ich das damals auch interpretiert :) Es bietet aber auch einige Vorteile: Man kann durch Funktionen wie GetPlayerLifecycle oder ähnliches halt das Objekt schnell bekommen. Aber der Hauptfokus liegt - soweit ich es weiß - darauf, dass man nicht extra selbst eine Liste anlegen muss und diese verwalten muss (beim connect / disconnect).
    Du kannst am Beispiel des PlayerLifecycles auch ein Lifecycle für Vehicle machen. Ich glaube, dazu hat 123marvin123 mal Nutzen in seinem Dealership Plugin gemacht. Einfach mal auf GitHub stöbern ^^ Aber bin in der Sache wieder etwas eingestaubt, sollte aber stimmen ;)


    2. Shoebill benutzt, um Plugins nutzen zu können sogenannte Wrapper (btw um selbst einen Wrapper ganz einfach zu erstellen, bietet 123marvin123 auch hier einen Converter auf GitHub an). Du brauchst also lediglich den Wrapper, beispielsweise über Maven, installieren bzw. inkludieren und dann compilen. Dieser kompilierte Code läuft dann aber natürlich auch nur, wenn du den Wrapper ebenso beim Server als Dependency vor deinem Gamemode lädst und wenn du das Plugin in der server.cfg eingetragen hast und es sich auch im /plugins Ordner befindet.
    Ein Wrapper ist somit eigentlich nur eine Zwischeninstanz, die die Handhabung mit Plugins deutlich vereinfacht, um das Prinzip des OOP weiterhin effektiv nutzen zu können.
    Hier eine kleine Anmerkung: nutze den Shoebill Streamer. Generell ist Shoebill im Umgang mit Plugins aber leider etwas langsamer als PAWN, da es erst jedesmal (beim Aufrufen einer Funktion) diese erst suchen muss (in anderen Sachen ist Shoebill aber wiederum schneller). Hier hat 123marvin123 die Wrapper in der Hinsicht verbessert, dass sie die Funktion beim Start initialisieren und es so schneller geht. Aber das intialisieren dauert eben auch ein wenig länger deshalb. Aber genug Hintergrundwissen, ich hoffe, dass das etwas geholfen hat.
    Stichwort also: Bei Plugins, die Wrapper über Maven installieren (falls diese auf gtaun / irgendwo anders über maven existieren) oder halt manuell laden

  • 2. Shoebill benutzt, um Plugins nutzen zu können sogenannte Wrapper (btw um selbst einen Wrapper ganz einfach zu erstellen, bietet 123marvin123 auch hier einen Converter auf GitHub an). Du brauchst also lediglich den Wrapper, beispielsweise über Maven, installieren bzw. inkludieren und dann compilen. Dieser kompilierte Code läuft dann aber natürlich auch nur, wenn du den Wrapper ebenso beim Server als Dependency vor deinem Gamemode lädst und wenn du das Plugin in der server.cfg eingetragen hast und es sich auch im /plugins Ordner befindet.
    Ein Wrapper ist somit eigentlich nur eine Zwischeninstanz, die die Handhabung mit Plugins deutlich vereinfacht, um das Prinzip des OOP weiterhin effektiv nutzen zu können.
    Hier eine kleine Anmerkung: nutze den Shoebill Streamer. Generell ist Shoebill im Umgang mit Plugins aber leider etwas langsamer als PAWN, da es erst jedesmal (beim Aufrufen einer Funktion) diese erst suchen muss (in anderen Sachen ist Shoebill aber wiederum schneller). Hier hat 123marvin123 die Wrapper in der Hinsicht verbessert, dass sie die Funktion beim Start initialisieren und es so schneller geht. Aber das intialisieren dauert eben auch ein wenig länger deshalb. Aber genug Hintergrundwissen, ich hoffe, dass das etwas geholfen hat.
    Stichwort also: Bei Plugins, die Wrapper über Maven installieren (falls diese auf gtaun / irgendwo anders über maven existieren) oder halt manuell laden

    1. Vielen Dank euch beiden. hab gedacht dass es vielleicht noch irgendwelche zusätzlichen vorteile bietet und deswegen gefragt ^^
    2. Dass mit den Wrappern ist mir klar, eigentlich wollte ich aber den Shoebill streamer nutzen. (Den hier: https://github.com/Shoebill/shoebill-streamer)
    Nun weiß ich leider weder wo ich diesen bei Maven finden kann noch wie ich diesen Compile (Arbeite hier zum 1. mal mit Maven und auch zum 1. mal mit github zusammen (Github hab ich bis jetzt nur genutzt um meinen Source Code zu sichern und zu publishen))

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Oder hier https://github.com/Alf21/event-system/blob/master/pom.xml


    Da steht die Dependency für den shoebill-streamer drin. Einfach in die pom.xml die TagList für die Dependency im Dependencies Tag einfügen.


    Klingt komisch, ist aber so :D Über die pom.xml werden die externen Projekte geladen und up-to-date gehalten.

  • Ah vielen dank ^^ Dachte echt dass ist komplexer.
    Jetzt habe ich nur noch ein problem D:
    Ich habe 0 plan wie ich die erstellen Objekte jetzt auch darstelle D:
    Hab mir zwar deinen Source Code angeschaut kann es da aber auch nicht herauslesen :(
    Ist zwar echt peinlich aber nachdem ich damals schon tagelang für PAWN suchen musste und es dann sowieso irgendwo nachfragen musste,
    halte ich es bei so wenig Dokumentation doch besser gleich zu fragen ^^


    Edit: Bitte vergessen hab beim plugin eitnrag gefailt :D

    Einmal editiert, zuletzt von JTK222 ()