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



  • Shoebill bietet mehrere Möglichkeiten einen Server zu betreiben. Du kannst dir einfach unser vollständiges Server Paket für SA-MP 0.3.7 runterladen. In diesem Paket ist alles wichtige enthalten (außer JRE/JDK).
    Wer nicht das ganze Paket haben möchte, kann sich auch das simple Paket runterladen, dort ist jedoch noch kein SA-MP Server dabei, dieser muss manuell auf http://sa-mp.com/ runtergeladen werden.
    Außerdem bieten wir auch einen Wrapper für Mac OS X an, mit dem es ganz einfach ist, unter OS X einen Server mit Shoebill zu betreiben. In diesem Wrapper wurde bereits alles vorinstalliert (JDK, Runtimes etc.). Einfach öffnen, und der Server läuft.




    • Volles Paket (0.3.7 R2): Download
    • Einfaches Paket (kompatibel mit 0.3.7 R2): Download
    • Mac Wrapper (alles dabei, 0.3.7 R2): Download







    Shoebill ist ein Projekt, welches es erlaubt, Filterscripts und Gamemodes in Java zu schreiben. Du hast vollen Zugriff auf alle Features von Java 8 und auch
    auf alle bereits erstellen Dritt-Anbieter-Libraries (z.B. Apache Commons). Dank Shoebill's eingebauten Informationen über SA-MP und GTA: SA ist es nicht nötig,
    nach Fahrzeug oder Interior IDs zu suchen, da alles nötige eingebaut ist, und auch zur Runtime zur verfügung steht. Außerdem bietet Shoebill eine großartige Möglichkeit
    mit Dialogen und anderen Features von SA:MP im Java-Style zu arbeiten (z.B. mit Lambdas oder Object-Buildern).






    • Unterstützt die neuen Features von Java 8
    • Objektorientiert
    • Eventgesteuert
    • Unterstütz Unicode/Codepages
    • Unterstütz Java Plugins (z.B. wie Bukkit, Spigot etc.)
    • Bietet einen Service-Manager um komponentenbasierte Entwicklung zu unterstützen
    • Verwendet slf4j als Log-Interface und log4j als Implementierung
    • Verwendet YAML als Konfigurationssystem und bietet dazugehörige Tools
    • Bietet einen Launcher um Bootstrap-ClassLoader Verschmutzung zu verhindern
    • Verwendet einen Dependency Manager basierend auf den Ressourcen von Maven
    • Unterschtüzt SA-MP 0.3.7 R2
    • Koexistieren mit Pawn Gamemodes / Filterscripts
    • Bietet ein AMX-Interface für Native Funktionen / Callbacks






    Shoebill wird hauptsächlich von drei Leuten entwickelt:
    mk124: Hat das Shoebill Projekt ins Leben gerufen und das Fundament gelegt
    123marvin123: Ist im April 2014 dem Shoebill Projekt beigetreten. Hat das Projekt am Leben gehalten nachdem mk124 keine Zeit mehr hatte
    JingLin (inaktiv): Half mk124 am Anfang



    Danke an:
    June, 258921, Shindo, Yiyin, ba2001, hitman249, Meta, Joe Zhao, 52_PLA, Zito, Julian
    und alle die Shoebill unterschtützen und benutzen







    Shoebill benutzt das Java Native Interface. Wenn es dieses Interface nicht geben würde, könntest du deine Gamemodes nicht in Java schreiben.
    Der Spieler braucht keine Modifikation um auf einem Shoebill Server zu spielen, alles passiert auf der Server Seite.



    Außerdem bietet Shoebill einen Dependency Manager welcher auf Maven basiert und automatisch die benötigten und alten Dateien
    ersetzt. Es gibt auch einen Updater für das native Plugin, den Dependency Manger und den Launcher. Wenn du diesen verwenden möchtest,
    kannst du einfach die beigelegte update-shoebill.bat/.sh Datei starten, und alle alten Dateien werden ersetzt.



    Einleitung in die Projekte:


    • ShoebillPlugin - natives Plugin für den SA-MP Server
    • shoebill-launcher - Boot Programm
    • shoebill-dependency-manager - Abhängigkeitsmanager, lädt und updated alle nötigen Artefakte
    • shoebill-utilities - Verschiedene Werkzeuge (nur Intern)
    • util-event - Event-System von Shoebill
    • shoebill-api - Haupt-API
    • shoebill-runtime - Shoebill's Laufzeitumgebung
    • shoebill-common - Oft benötigte Werkzeuge (für Dialoge, Fahrzeuge etc.)
    • example-vehicle-manager-plugin - Beispiel Plugin
    • example-lvdm - Beispiel Spielmodus


    Einleitung in die Order / Datei Struktur:




    • plugins/Shoebill.dll - Natives Plugin für Windows
    • plugins/Shoebill - Natives Plugin für Linux
    • gamemodes/base.amx - Leere AMX Datei (benötigt)
    • filterscripts/bare.amx - Leeres Filterscript (benötigt für OnRconCommand)
    • shoebill/bootstrap - Die benötigten Jar-Dateien für Shoebill
    • shoebill/repository - Die lokale Repository für den Dependency Manager
    • shoebill/libraries - Zusätzliche Libraries für Shoebill die nicht in der Maven Repository sind
    • shoebill/gamemodes - Hier kannst du deinen Gamemode einfügen
    • shoebill/plugins - Hier können zusätzliche Plugins eingefügt werden
    • shoebill/shoebill.yml - Shoebill's Konfigurationsdatei
    • shoebill/resources.yml - Ressourcen Konfigurationsdatei (welcher Gamemode, welche Repository, welche Plugins, welche Runtimes etc.)
    • shoebill/jvm_options.txt - Parameter für die virtuelle Java Maschine
    • shoebill/codepages.txt - Eine Liste der Windows Codepages, welche für Linux benötigt wird







    Shoebill wird auf GitHub entwickelt: GitHub
    Unser CI Jenkins (für manuellen JAR-Download): Jenkins
    Unsere Webseite: Shoebill
    Unsere API-Dokumentation: API-Doc
    Unsere Commons API-Documentation: Commons API-Doc





    Schau dir unsere YouTube Videos an:



    Schau dir unsere Entwicklungsbeispiele an:


    Schau dir unsere Wiki an und erstelle ein Projekt mit dem Projektgenerator:

    27 Mal editiert, zuletzt von 123marvin123 () aus folgendem Grund: Dropboxlink geändert

  • Irgendwie verstehe ich immer noch nicht, was das jetzt nützt. 8|

  • Ahhh okay, jetzt check ich es.
    Klingt Interessant.


    Und noch eine Frage: Wie entwickelt man so ein Plugin?
    Bzw. was muss man dafür können? Java?

  • Irgendwie verstehe ich immer noch nicht, was das jetzt nützt. 8|

    Damit kann man vollständige Gamemodes in 100% Java schreiben.
    Das ermöglicht dir sehr viele neue Möglichkeiten. Außerdem hat der Autor der API es einem sehr einfach gemacht.
    Er hat sich z.b die Mühe gemacht alle Fahrzeug Ids mit Namen in einem Enum zu speichern. Außerdem gibt es viele verschiedene Dinge die er hinzugefügt hat, die es in Pawn nicht gibt / nur problematisch zu implementieren sind.


    Ja, du musst dich nur ein wenig mit Java auskennen.
    Ein einfaches Beispiel findest du hier: klick


    @iSweety: Das mit den Plugins aktivieren und deaktivieren, ist ebenfalls ein Plugin für Shoebill, dass in Java geschrieben wurde. Pawn Filterscripts funktionieren nicht immer 100 Prozentig wenn man Shoebill Gamemodes verwendet.

  • Kann denn jeder auf diesem Gamemode/Server spielen oder braucht man dafür einen extra Client?


    Man braucht keinen extra Client, du musst das Shoebill Framework lediglich als Plugin in deine serverconfig Datei eintragen. Am besten lädst du dir das SA-MP Server Development Paket runter, da siehst du wie das alles aufgebaut ist. Es gibt nähmlich extra Config Datein für Shoebill. (http://puu.sh/3S0JD/62a386d1da.zip <-- Ist die 0.3x Version, einfach 0.3z Server runterladen und Datein ersetzen)


    //Edit:
    Es wurde soeben die Version 1.0 releast.
    Es hat sich viel getan, jetzt wird z.B. 0.3z R2-2 supportet.
    Es gibt aber auch sonst noch sehr viel das verändert wurde :)

  • Klingt interessant. Werde ich mal weiter verfolgen. :)

  • Mk124 (Entwickler der API) war so freundlich die MapAndreas Heightmap mit Shoebill funktionieren zu lassen.
    Damit alles funktioniert benötigt ihr folgende Klasse: http://pastebin.com/i9JW5Kt6


    Ihr müsst die SAfull.hmap in den "data" Ordner eures Gamemodes / Plugins legen.


    Um MapAndreas mit Shoebill zu benutzen, müsst ihr als erstes eine Instanz der MapAndreas Klasse anlegen.
    Das funktioniert z.B. so:

    Code
    MapAndreas mapAndreas = new MapAndreas(new File(getDataDir(), "SAfull.hmap"));


    Mit dieser Instanz kann man nun folgende Dinge machen:

    Code
    float z = mapAndreas.findZ(player.getLocation().x, player.getLocation().y);


    Wenn ihr fertig mit dem MapAndreas Objekt seid, und es nicht mehr benötigt, könnt ihr es schließen:

    Code
    mapAndreas.close();


    Shoebill wird die HeightMap nicht in den Speicher laden. Das bedeutet das Shoebill nicht mehr Speicher als sonst benötigt!
    Es war uns sehr wichtig dies zu ermöglichen, da das SA-MP Plugin ca. 80mb verwendet.
    Neben der sehr niedrigen Speicherbelastung ist Shoebill etwas 4 mal schneller im berechnen der Z-Koordinate als PAWN.


    Speedtests:


    Java:
    Ergebnis: 190ms

    Code
    MapAndreas mapAndreas = new MapAndreas(new File(LvdmGamemode.getInstance().getDataDir(), "SAfull.hmap"));
    long milli = System.currentTimeMillis();
    for(int i = 0; i < 10000000; i++) {
        mapAndreas.findZ(i000, i/3000);
    }
    player.sendMessage(Color.RED, "* Ms: " + (System.currentTimeMillis() - milli));


    Pawn:
    Ergebnis: 1004ms

    Code
    new Float:z;
    new tick = GetTickCount();
    for(new i = 0; i < 10000000; i++) {
        MapAndreas_FindZ_For2DCoord(i%3000, i/3000,z);
    }
    printf("Difference: %i ms", GetTickCount() - tick);


    Ich habe soeben ein Autohaus System für Shoebill releast ([ PLUGIN ] Autohaus System für Shoebill (Java))


    //Edit:
    Shoebill für 0.3z R2-4 released: http://puu.sh/bGqjO/66ed0bd7bb.zip

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Das freut mich zu hören! Wenn du Fragen oder Probleme hast stehe ich dir gerne zu Verfügung.


    Diese Woche kommt Update 1.1, welches ermöglicht gleichzeitig Shoebill und einen normalen Pawn Gamemode zu verwenden. Das ermöglicht einem, dass man seinen Gamemode nicht neu schreiben muss.

  • Ich habe gestern die API bzw. dein Programm getesten :) Ich habe echt ewig gebraucht um es aufzusetzen, da es durch Eclipse Luna irgendwie Komplikationen mit Maven gibt.
    Da ich Maven nicht nutzte, hatte ich keine Anleitung, wie ich es kompilieren sollte. Zum Glück habe ich dann doch noch im xml.ant - Build vom LVDM - GM gesehen, wie man es kompilieren kann :)


    Es klappt alles super, nur es wäre echt cool, wenn irgendwo ein Tutorial oder eine Übersichtsseite zu den Funktionen wäre oder wie man sie nutzt. Ein Startscript wie bei PAWN wäre auch nicht schlecht :D


    Ich persönlich finde Java besser. Ich finde, dass man mehr Freiheit hat. Doch es ist ziemlich kompliziert mit einem Werkzeugkasten ( Deine API ) zu arbeiten, wenn man nicht weiß, was im Werkzeugkasten drin steckt bzw. wie man das Werkzeug nutzt :D


    Habe gestern dann doch geschafft den Server aufzusetzen und es hat alles geklappt. Doch bevor ich ganz umsteige, eine Frage: Wo liegen die Grenzen bei Shoebill bzw. an welche Funktionen von PAWN/C++ kommt Shoebill nicht ran?


    Würde gerne zu Java umsteigen ( da wir in der Schule auch damit arbeiten und ich persönlich auch + zudem Android Applikationen auf Java geschrieben werden ).
    Ich bin auch sehr erstaunt dass SAMP noch immer lebt und Nemesis und du noch aktiv sind ( Posts von gestern ).
    Arbeitet ihr noch aktiv an SAMP? Oder ist es mittlerweile sinnlos überhaupt noch damit wieder anzufangen?


    Und was mich auch sehr interessiert, bietet Shoebill bessere Möglichkeiten, den Server vom Web aus zu steuern und upzudaten bzw. vom Computer aus den Webserver/das Script auf dem Webserver zu steuern?


    Schade dass mir Shoebill erst jetzt auffällt.
    Die Anleitung zum Aufsetzen von Shoebill, also das Tutorial war jedoch sehr übersichtlich und wirklich gut beschrieben, finde ich gut. Könnte man vllt auch ein Serverpaket oder Eclipse Projekt-Paket bereit stellen? Solche Projekte werden am besten angenommen, wenn man alles leicht hält. Manche haben vllt. ein kleines wenig mehr Ahnung von Java als von C++, doch wer springt einfach so ins kalte Wasser ;D :D


    PS: Der Downloadlink von Shoebill Server ist down, was die Arbeit viel komplizierter gemacht hat :D
    Vllt würden mit ein bisschen mehr Übersicht und Appell / mehr Öffentlichkeit, mehr 'Scripter' zu Shoebill umsteigen. Shoebill ist für mich ein sehr gelungenes Projekt mit wahrscheinlich viel Arbeit! Respekt ^^ Volle Punktzahl! :thumbup:8o

  • Shoebill ist auf jeden Fall mal was neues und macht spaß mal zu sehen mit wie wenig Code man z.b ein Dealership Script schreiben kann. Ist zwar bei einigen stellen noch Neuland aber man gewöhnt sich schnell dran.

    Es klappt alles super, nur es wäre echt cool, wenn irgendwo ein Tutorial oder eine Übersichtsseite zu den Funktionen wäre oder wie man sie nutzt. Ein Startscript wie bei PAWN wäre auch nicht schlecht

    Ich denke das lässt sich einrichten, ich stehe zurzeit mit 123marvin123 gut im Kontakt, und unterstütze ich bei Kleinigkeiten, wenn er nichts dagegen hat, was ich nicht denke, könnten wir das einrichten.


    Mit freundlichen Grüßen

  • Alf21: Danke, es gibt eigentlich keine Grenzen. Dir steht die volle Macht einer Java Maschine zur Verfügung. Du kannst deinen Server z.B über einen TcpListener steuern.
    Du kannst dir eine Android Applikation schreiben die dann mithilfe des TCP-Protokolls mit deinem Server kommuniziert. Es wird momentan am Update 1.1 gearbeitet, dass die Verwendung mit PAWN-Gamemodes und Shoebill Gamemodes ermöglicht.
    Du musst dann deine bereits vorhandenen Pawn-Gamemodes nicht mehr neu schreiben, sondern kannst sie einfach weiter benutzen. Man wird dann auch Funktionen von Shoebill zu Pawn aufrufen können.
    Es ist geplant ein volles Tutorial und Beispielcode bereitzustellen.


    Viel Spaß noch mit Shoebill :) Wenn du fragen hast kannst du dich an mich oder Zito & Spikes wenden.

  • Okay, ich bin echt begeistert und dann lest ihr die Nachrichten noch so schnell.. Wusste gar nicht, dass ihr auch nen Support habt :D
    Das klingt sehr spannend aber auch sehr schwer / komplex umzusetzen, da muss man echt schon Ahnung haben, ich wusste denke mal nicht, wie ich PAWN implementieren sollte, Anfänge vllt, aber nicht wie man beides Verknüpft, also Hut ab und macht bitte weiter so, ich denke, ich bin nicht der Einzige, der sehr daran interessiert ist mit Java zu arbeiten :)


    Ich werde immer wieder reinschauen und denke auch aktiv hier dran arbeiten und mal gucken, wäre ne schöne Alternative auch für andere, 'spielerisch' Java zu lernen. Falls ihr Unterstützung braucht, stände ich zur Verfügung, falls ihr Beispielsweise noch keine Homepage oder Beschreibung oder Blog habt oder Docs erweitern wollt!


    Freue mich auf die neue Version! :thumbup:


    Thx 4 Answer!

  • Danke, wir müssen mal sehen wie wir das mit der Webseite regeln. Das neue Update wird wahrscheinlich noch diese Woche erscheinen. Danach werde ich zusehen das ich ein paar Tutorials und Anleitungen verfasse.
    Wir werden uns bemühen den Einstieg in Shoebill so leicht wie möglich zu gestallten. Deswegen habe ich auch einen kleinen Updater geschrieben, der den Launcher, den Dependency-Manager und das Plugin aktualisieren kann.
    Alles andere aktualisiert sich automatisch :)

  • So, habe mal ein wenig mit den Textdraw vom LVDM rumprobiert, und da fiel mir etwas auf :O Sobald man 2x solche Commands hintereinander macht bzw. 2x hintereinander Textdraws aufruft (damit diese runter 'sliden' / rutschen, um Platz für den neuen zu machen), wird die Console mit einem Haufen von Fehlermeldungen vollgespamt...


    Ich habe 2x hintereinander als Test "/test kill" aufgerufen und das kam raus:



    Wie kann ich es fixen oder ausblenden, funktionieren tut ja alles, aber es spamt und haut sehr in die Log files dann rein...? Es wird angezeigt, dass der Fehler in der Shoebill API liegt, so vollziehe ich das... Oder liegt das an dem Aufbau von der Textdraw-Methode, dass dort ein Fehler liegt?


    MfG Alf21 :)

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen