Jump to content

Arena nach Spiel Zurücksetzen (mit WorldEdit?)


AmbroAnalog
 Share

Recommended Posts

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...
B
B