Rhino ist auch nur eine Library, die halt mit Java mitgeliefert wird. Wenn du Lua in Java einbetten willst, so würde ich LuaJ (
http://www.luaj.org/luaj/3.0/README.html) empfehlen. Das habe ich kurzzeitig verwendet, bevor ich meine Entwicklung auf C++ umgestellt habe. Das bietet dir alles was du brauchst. Also die Einbindung der Sprache in die Anwendung ist in keinem Fall ein Problem, du musst dafür auch keinen eigenen Interpreter schreiben oder ähnliches. Das würde konkret halt so aussehen, dass du einen Adapter zwischen dem Eventsystem von Bukkit und deiner Skriptengine brauchst, der dafür sorgt, dass sich Skripte für Events von Bukkit registrieren können. Ein paar weitere Funktionen musst du vermutlich ebenfalls noch zur Verfügungstellen, beispielsweise für den Scheduler oder sowas. Hier bietet es sich dann auch an das Ganze zu trennen, so dass du über deine Skriptengine einzelne Skripte entladen kannst und alle registrierten Events automatisch gelöscht werden. Das ist das Sandboxing, das ich früher angesprochen habe. Ist sicherlich sehr mühseelig zu implementieren, aber du kannst damit den Zustand von Skripten oder Quests komplett einfrieren oder analysieren. Mit anderen Sprachen, die grundsätzlich tiefer mit der Anwendung verbundelt sind, funktioniert das nicht unbedingt so einfach. Das geht alles auch mit anderen Sprachen, doch mit Lua kannst du es halt ERZWINGEN und das finde ich persönlich das Killerargument für Lua.
Zu 2) Es gibt mächtige Systeme, aber wenn man sich z.B. gegen Python entscheidet, muss man eh ein komplett eigenes System machen. Zudem kommt, dass wir möglichst wenige "fremde" Plugins verwenden wollen, wobei Denizen eben so eins wäre.
Denizen ist aber schon fertig und getestet. Wenn du Glück hast, findest du sogar Leute, die es bereits benutzt haben. Das ist ein nicht zu unterschätzender Vorteil. Man muss aber auch sagen, dass du dich damit davon abhängig machst und es ggf. nicht anpassen kannst. Das ist insbesondere bei großen Projekten vielleicht ein Problem, doch dazu später mehr.
sondern vielleicht sogar Packetmanipulation (indirekt oder direkt) drauf hat, dann ist das noch einen Schritt komplizierter. (Besonders, wenn man sich dann noch Sorgen um die Synchronisierung der Dateien/Skripte, Autocomplete und anderen schicken Stuff machen muss)
Skripte haben unter keinen Umständen jemals irgendwelche Netzwerkpakete anzufassen. Das sind vollkommen verschiedene Abteilungen. Netzwerkpakete sind Aufgabe der Netzwerkschicht, wenn du da bestimmte Effekte realisieren willst, gehört das in eigene Klassen gekappselt, die das Skript als Blackbox benutzt. Von Autocomplete wirst du nur träumen können. Diese Seperation in Aufgabenbereiche ist ein ganz wichtiger Schritt, wenn du ein großes System erzeugen und warten willst. Ich empfehl dir dringendst, dass du zuerst mit ein paar der existierenden Systeme arbeitest. Nicht nur für Minecraft, schau dir andere Spiele an. Schreib Skripte und Quests für diese Systeme. Du machst mir aktuell nicht den Eindruck, dass du eine Vorstellung davon hast, welche Daten du überhaupt austauschen musst oder wie sich so eine eingebettete Skriptsprache anfühlt. Außerdem würde ich dir auch empfehlen einen kleinen Prototyp vorher zu entwickeln, sofern du wirklich dein eigenes System implementieren willst. Irgendwas kleines um mit der Binding API deiner gewählten Umgebung vertraut zu werden.
Zu 1) Inwiefern? Was genau hat Java9 da? Nichts, was ich in den Changelogs gesehen habe, an das ich mich noch erinnere, weist darauf hin.
Java 9 bringt nach aller Vorraussicht ein Modulsystem mit, dass es dir erlaubt Jar Dateien inklusive Inhalt dynamisch zur Laufzeit zu Laden aber auch zu Entfernen. Ersteres ging mit ein paar bösen Tricks schon länger, aber letzteres war nahezu unmöglich. Stellt dich aber im Endeffekt vor die selben Probleme, wie alle anderen Skirptsysteme. Du musst in der Lage sein, die Objekte, die von einem Skript erzeugt werden restlos aus dem Speicher zu entfernen, das heißt sämtliche Listener oder ähnliches müssen vor dem Entladen raus, ansonsten hast du dadurch keine Vorteile. Dafür ist es notwendig, dass du genau verfolgst, welche Skripte welche Daten im System verteilt haben und diese am besten als Teil der Schnittstelle automatisch entfernst.
Dann noch so ein paar eher persönliche Dinge, die man vielleicht mal Ansprechen sollte:
Mir ist auch klar, dass JS und Python an sich keine (großen?) Vorteile gegenüber Lua haben... nur die Sache ist: Für Python gibt es Denizen (und bestimmt mehr).
Das sollte keine Rolle Spielen. Du wählst einmalig das System, mit dem du deine Quests und Skripte erledigst. Ich mein, was ist hier genau das Arugment? Du wirst niemals an den Punkt kommen wo du deine Skripte plötzlich auf ein anderes System migrierst. Egal was du wählst, du bist an das anfänglich gewählte System mit seiner Programmiersprache gebunden. Dass andere Systeme andere Sprachen benutzen spielt dann keine Rolle mehr.
MMORPG, mit Quests, die auch noch einmal vom Komplexitätsgrad über dem von den mir bekannten MMOs liegen.
Zu 3) Ich denke es ist schon recht klar, dass man auf einer Seite für simplere Sachen ein WYSIWYG System braucht, aber für interessantere Quests dann natürlich eigene Sachen programmieren muss.
Glaubst du nicht, dass jedes Entwicklerstudio das ebenfalls von ihrem eigenen Produkt glaubt? Das ist schlicht eine Selbsttäuschung. Du wirst den Großteil aller Quests in einem ganz einfachem Schema von Baukastenelementen abbilden können und bedenke, dass eine Quest mit vielen Teil nicht automatisch komplex ist. Das sind auch alles nur einzelne Bausteine. Mit einem WSYIWYG Editor kannst du beliebig komplizierte Questsysteme erstellen, die Frage ist nur, ob die Zeit, die du in den Editor steckst am Ende wieder dadurch gewonnen wird, dass Nichtprogrammierer dafür Quests für dich erstellen können und das bezweifle ich ehrlich gesagt, von daher würde ich das nicht machen.
Es geht um einen Server mit derzeit einer Map, die knapp größer ist als die von Skyrim.
Das ist etwas, dass ich sehr oft sehe, wenn sich jemand total übernimmt. Wenn eure Map größer ist als Skyrim, dann hoff ich auch, dass euer Team größer ist. Skyrim war schon mehrere Jahre in Entwicklung, ich seh nicht warum ihr da als vermutlich unerfahrenes Team nicht mindestens doppelt so lange brauchen solltet und ob bis dahin Minecraft noch wirklich gespielt wird? Vor allem auf dieser Version? Was ist wenn die Plugins, die ihr benutzt und fest integriert habt plötzlich keine Updates bekommen und ihr daher nicht updaten könnt? Vielleicht erstmal kein Problem, doch wenn eure Version dann 4-5 Jahre alt ist könnte das zum Problem werden.
--
Was du suchst ist ein Skriptsystem. Dass du damit Quests machen kannst, ist ein praktischer Nebeneffekt. Für mich klingt das alles so, als ob du dich da massiv übernimmst, das ist aber deine Entscheidung. Auf jeden Fall ersparst du dir sehr viel Arbeit, wenn du bestehende Systeme wie Denizen benutzt, auch wenn du dabei das Risiko in kauf nimmst, dass du plötzlich auch Denizen mit Updates versorgen musst. Wobei ich sagen muss, dass Denizen, nachdem ich es mir kurz angesehen habe, absolut dreckig aussieht. YAML ist eine Sprache zum Beschreiben von Datenstrukturen, nicht zum programmieren. Ich würde da absolutt die Finger von lassen und was vergleichbares suchen. Wenn du etablierte Skriptsprachen verwendest, findest du überall Hilfe, wenn du ein Problem hast. Für diese Insellösung findest du nichts und dazu bietet Denizen nicht mal wirklich eine saubere Trennung der Skripte, du kannst da ebenfalls beliebig kaputte Skripte bauen.