• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

WorldEdit API - Schematics auf Code Ebene verwalten

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Servus,
hier laufen doch sicher ein paar Leute rum die mit der WorldEdit API Erfahrungen gemacht haben?

Ich arbeite momentan an einem Plugin wofür ich Zugriff auf die World Edit Schematics des Servers brauche.
Wo in der API finde ich dort den Zugang?

Ich brauche folgende Funktionen:

- Liste aller Schematics auf dem Server ("//schematic list" als Code Äquivalent)
- Schematic zu der Liste der Server Schematics hinzufügen und speichern
- Einzelne Schematic anhand des Dateinamens finden

Bin grade noch am wühlen in den Docs / Wikis, aber ein wenig Hilfe von hier wäre durchaus praktisch.
Kann mir vorstellen, dass bestimmt schon mal jemand hier die WorldEdit API für was ähnliches genutzt hat - von daher würde ich mich da gerne an eurer praktischen Erfahrung bedienen.
 

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Den Schematic-Ordner erhältst du z.B. so:
Code:
LocalConfiguration worldEditConfig = WorldEdit.getInstance().getConfiguration();
File schematicFolder = WorldEdit.getInstance().getWorkingDirectoryFile(worldEditConfig.saveDir);

Dort kannst du dann mit den Java-Funktionen arbeiten.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Dankeschön @BlackHole!

Also WorldEdit hat keine interne Verwaltung für Schematics, sondern greift jedes Mal bloß auf den Ordner zu?
Das würde es für mich natürlich super einfach gestalten, da ich keine Rücksicht auf irgendwelche Caches etc. von WE nehmen muss, sondern einfach die Dateien in den Ordner schreiben kann.
 

FelixKlauke

Erzengel
Ehem. Teammitglied
Registriert
5 Januar 2014
Beiträge
1.038
Diamanten
299
Minecraft
FelixKlauke

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Dankeschön! Werde ich mir auf jeden Fall anschauen, wer weiß wie nützlich das bald werden kann. :)
Momentan ist mein Ziel allerdings lediglich auf die Dateien zuzugreifen bzw. neue hinzuzufügen, ich habe also lediglich mit den ByteStreams der Dateien etwas am Hut.

Mit dem Plugin beabsichtige ich Schematics über ein BungeeCord Netzwerk transferieren zu können, per Befehl.
Praktisch, wenn man einen extra Bau Server mit spezieller Umgebung hostet um auch größte Bauarbeiten zu ermöglichen.

Der Gedanke dahinter ist, dass man am Ende per /ssh load <SchematicName> [ServerName] die Schematic auf den Server auf dem man sich grade befindet transferieren kann.

Um Missverständnisse zu vermeiden:
/ssh hat sich als Command ergeben, da /ss einem früher oder später in den Rücken fallen wird, da in den Köpfen mancher Menschen der Kalender nach 1945 stehen blieb.
Außerdem hab ich das Plugin auf den Namen "SchematicShare" getauft, von daher ist es sogar ein relativ treffender Command.

Also den Part wie ich an die Schematics rankomme und neue hinzufüge ist mit euren Antworten nun gelöst.
Jetzt bin ich noch am schauen wie man das transferieren am besten machen täte.

Plugin Messages fallen raus, dafür müssten auf Anfrage- und Zielserver(n) min. 1 Spieler online sein.
Grade bei geschlossenen Bauservern ist das sehr unwahrscheinlich.

CustomPayload Packets fallen wie es aussieht auch raus, da BungeeCord nicht die Absicht hat eine umfangreiche Packet API bereitzustellen und die Gründe dafür sind meines Erachtens nachvollziehbar.

Man könnte selbst mit Sockets beigehen... möchte ich aber vermeiden.
1 extra Port für jeden einzelnen Unterserver im Bungee Netzwerk ist nicht schön zu handhaben.

Datenbank - da bin ich momentan am drüber nachdenken.
Dann könnte ich mir evtl. sogar BungeeCord als Brücke schmieren und einfach direkt über Config Dateien die einzelnen Server ihren Namen bestimmen lassen und dann die Schematics mit der Datenbank synchron halten und die Anfragen darüber ablaufen lassen.

Letzteres wäre glaube ich das Vernünftigste und sogar das Einfachste in diesem Fall.
Wollte bloß mal meine weiteren Gedankengänge und den Grund meiner Frage mit in den Raum werfen.

Eventuell habt ihr noch Ideen, @SasukeKawaii oder @BlackHole? :)
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
488
Minecraft
SirYwell
Die Version mit der Datenbank erscheint mir aktuell erst mal am sinnvollsten, da hast du dann sogar relativ einfach die Möglichkeit, das Ganze zum Beispiel so zu erweitern, dass man die Schematic direkt auf mehrere Server überträgt oder auf einer Webseite abrufbar macht und zum Download bereitstellst oder oder oder :)
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
auf einer Webseite abrufbar macht und zum Download bereitstellst
Ja, der Gedanke kam mir auch schon.
Das wäre für Kreativserver auch wieder ne feine Sache.

Da müsste man dann evtl. noch eine Art Rollensystem für entwerfen, damit man es auch für die Öffentlichkeit und für die Spieler, nicht nur die Teamler zugänglichen machen kann, ohne aber gleichzeitig Server interne bzw. private Schematics zu entblößen.
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
488
Minecraft
SirYwell
Da müsste man dann evtl. noch eine Art Rollensystem für entwerfen, damit man es auch für die Öffentlichkeit und für die Spieler, nicht nur die Teamler zugänglichen machen kann, ohne aber gleichzeitig Server interne bzw. private Schematics zu entblößen.
Klar, da hat man jede Menge Möglichkeiten. Soll das Plugin für einen bestimmten Server sein oder veröffentlichst du es?
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Soll das Plugin für einen bestimmten Server sein oder veröffentlichst du es?
Ich veröffentliche es.
In meiner Freizeit bastel momentan alle Plugins zusammen die ich für meine Projekte als nützlich erachte, aber diese exklusiv an einen Server zu ketten finde ich blödsinnig.

Wenn noch andere Nutzen daran haben, ist das prima.
Außerdem: Je mehr Leute Zugang zum Plugin haben desto mehr potentielle Bug-Finder habe ich, was wieder zur Verbesserung positiv beiträgt.

Bin auch momentan ein paar meiner alten Ideen am aufrollen, aber das habe ich erstmal nach hinten gestellt, weil ich spontan Würgreiz kriege bei so manchen Sachen die ich vor 2 - 3 Jahren fabriziert hab. Als wenn ich total besoffen gewesen wäre... :oops:
 

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Die einzelnen Server könnten auch einfach auf den selben Ordner zugreifen. Bei verschiedenen Rootservern dann als Netzwerkmount bzw. Netzwerkfreigabe.
Schematics kann man auch in Unterordnern sortieren und damit verschiedene Dateiberechtigungen vergeben.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Joa, aber das ist ein, vergleichsweise, extremer Aufwand.
Und unerfahrene Nutzer hätten keine Möglichkeit das so einfach umzusetzen.
Dann ist es nicht sonderlich skalierbar, wenn du das für jeden einzelnen Server, Schematic etc. pp. machen musst.

Dann nehmen wir mal an, es handelt sich um einen Game Server.
Da kann man dann nicht so einfach mal eben ein Netzlaufwerk einhängen und Dateiberechtigungen ändern, etc.

Ich fände das persönlich am komfortabelsten als Plugin, da man damit nicht den Server bzw. dessen Umgebung beeinflussen muss um zum Ziel zu kommen, sondern man erweitert den Server bloß um ein Plugin.

Wenn ich meine Welt vorrendern möchte, dann teleportiere ich mich ja auch nicht 20.000 Mal quer durch das Koordinatensystem, sondern nutze einfach WorldBorder - weil es mir die schwere und lästige Arbeit abnimmt ohne weiteren Beitrag meinerseits.

Also verstehe mich nicht falsch, schöner Einwurf, aber ich persönlich sehe da zu viele mögliche Probleme und Aufwände drin.
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
@UnityGaming Die Frage, die du hier stellen solltest ist, ob du wirklich das Rad neuerfinden willst, wenn es bereits robuste Lösungen gibt. Bedenke außerdem immer, dass es Anwender gibt, die ein einfaches Netzwerkshare bevorzugen würden, weil sie damit mehr Kontrolle über den Datenaustausch haben.

Mir war das jetzt zu viel Text den kompletten Thread zu lesen, aber ich hab das kurz überflogen und ich glaub die Frage war, wie du die Schematics auf mehrere Instanzen des Plugins verteilen kannst. Wenn du die Anforderung stellst, dass das Plugin keine externen Dienste braucht, dann würde ich das zumindest so aufbauen, dass man das trotzdem alles austauschen kann. Ich würde das daher so machen:

Sofern du irgendwelche Metadaten mit den Schematics speichern möchtest, dann würde ich das einfach als .json Datei neben der eigentlichen Schematic Datei machen. Ich gehe aktuell nicht davon aus, dass deine Instanzen gleichzeitig auf die selben Dateien schreiben wollen, ansonsten kommst du um eine Datenbank oder einen Syncserver nicht drum herum.

Aktuell scheinst du vermutlich die Schematics auf allen Instanzen vorhalten zu wollen, das ist allerdings blöd, wenn die Instanzen auf dem selben Server laufen und damit ohnehin auf das gemeinsame Verzeichnis Zugriff hätten. Also das würde ich daher auf jeden Fall so flexibel machen, dass man auch einfach ein Verzeichnis angeben kann, in dem die Daten liegen, also dass du dich erstmal überhaupt nicht darum kümmerst, wer die Dateien synchronisiert.

Im nächsten Schritt implementierst du dann ein (optionales) Feature, mit dem das Plugin das Synchronisieren selbst übernimmt. Ich würde hier aber auch auf Standards setzen, du könntest das z.B. über einen FTP Server machen und dann noch einen FTP Server mit deinem Plugin ausliefern. Dann könnte man wiederum ebenfalls selbst auswählen, ob man den Server nicht selbst hostet.

Du hättest damit dann 3 Betriebsmodi und maximale Flexibilität.
  1. Komplett ohne Sync (der Admin muss sich darum kümmern)
  2. Sync über externen FTP Server
  3. Sync über eingebauten FTP Server (eine Instanz wird dann zum Master und hostet den FTP Server). Musste natürlich nen FTP Server ins Plugin einbauen.
Warum keine eigene Lösung fürs Syncen? Weil du sonst Zugriffsberechtigungen, Dateitransfer und das Protokoll selbst entwickeln müsstest. Zuletzt noch der Hinweis, dass ich persönlich kein FTP sondern SFTP, also einfach das SSH Protokoll verwenden würde. FTP ist unverschlüsselt nämlich einfach Müll und es gibt massiv SFTP Libraries für Java. TFTP wär ansonsten noch ne Alternative, aber das hat halt gar keine Zugriffsberechtigungen und dürfte dann nicht offen übers Netzwerk erreichbar sein.

Eventuell willst du dir auch mal rsync angucken, das besteht nämlich eigentlich auch immer aus Client und Server, ich weiß nur nicht ob sich das überhaupt für deine Zwecke eignet, aber dafür gibts bestimmt auch Java Libraries. Oder du frägst mal Google, was es so zu "peer to peer sync" findet. Wenn dein Masterserver ausfällt stehen die anderen Instanzen nämlich dumm da. Das hier sah zumindest auf den ersten Blick ganz gut aus http://hive2hive.com/

Edit: Was mir jetzt gerade noch eingefallen ist: Du könntest auch ein sehr simples System mit einem kleinen Webserver im Plugin aufbauen, der einfach GET und PUT anbietet und Metadaten und vielleicht auch einen Auth-Token im Header transportiert.
 
Zuletzt bearbeitet:
Oben