Jump to content

Arena nach Spiel Zurücksetzen (mit WorldEdit?)


Empfohlene Beiträge

Hallo lieben Forum,

ich möchte für meine eigenes Plugin eine Arena aufbauen. Nachdem eine Spiel in der Arena zu ende ist sollen alle, von Spielern vorgenommenen änderungen in der Arena wieder rückgängig gemacht werden.

Soweit zur Theorie ;)

Wie kann ich das jetzt praktisch umsetzten?

Ich habe mir gedacht, dass ich meine Idee mit der WorldEdit API umsetzen könnte, indem ich die Arena mit //save speicher und nach dem Spiel wieder mit //load wiederherstellen.

Leider habe ich keine praktischen Anwendungsbeispiele der API in diesem Fall im Internet gefunden :(

Die nötigen API-Befehle (save und load) habe ich hingegen bereits in der Dokumentation gefunden (LINK).

Kann mir jemand helfen?

Bin für jede form der Hilfe dankbar!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein paar konkretere Infos zum Anwendungsfall wären ganz praktisch.

Lässt du das alles auf einem Server laufen oder ist die Arena auf einem extra Server? Weil auf einem Server würde der "Rebuid" ja möglicherweise immer wieder kleinere Laggs verursachen.

Was ich mir vorstellen könnte als Alternative (nur eine Idee): Vielleicht kannst die geänderten Blöcke ja "loggen", also in irgendeiner passenden Collection (vllt. HashSet?) ablegen und dann dieses Set nach Spielende durcharbeiten und quasi nicht die ganze Arena neu hinsetzen sondern nur die Änderungen rückgängi machen. Ich könnte mir vorstellen, dass das möglicherweise einfacher und performanter wäre...

Liebe Grüße

Arcalio

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja, es wird schwer. Ein HashSet mit allen Blöcken zu machen geht, aber ich würde es auf eine Schwierigkeitsstufe von einem eindeutigen "Meh :|" einstufen, daher empfehle ich, es etwas unschön, aber praktikabel zu machen:

Lad dir ein Plugin herunter, dass Welten resettet, wie beispielsweise Map Reset, und führe dann das entsprechende Kommando im Plugin aus. In Plugins kannst du die Konsole wie folgt Kommandos ausführen lassen:


Bukkit.dispatchCommand(getServer().getConsoleSender(), "kommando");

So, und jetzt freu ich mich auf viele Antworten wie "Baustein, das ist aber ekliger Code", und ja, das ist es, aber es ist einfach, also Deal with it. ;)

Liebe Grüße,

Baustein

Link zu diesem Kommentar
Auf anderen Seiten teilen

Baustein, das ist aber ekliger Code...

Ich denke, es ist performanter, es selbst zu schreiben und nicht ein ganzes anderes Plugin nutzen zu müssen. Zumal ja die Arena (ich habe ja keine weiteren Infos) auch möglicherweise nicht allein in einer Welt steht.

Warum nicht in ein Set? Wenn ein Block geändert wird, dann wird der Ausgangsblock im Set gespeichert. Wenn er schon vorhanden ist, wird nichts überschrieben. Nach dem Spiel alle Blöcke durchgehen und wieder setzen.

Alternativ auch in einer HashMap. Da kann man die Location als Key nehmen. Wäre aber in sofern doppelt, da der Block, der als Value gesetzt ist, auch die Location enthält.

Außerdem ist es immer eine gute Übung, etwas selbst zu schreiben. Außerdem hat man so keine Abhängigkeiten ;)

Liebe Grüße

Arcalio

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B