AmbroAnalog Posted August 31, 2014 Share Posted August 31, 2014 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 More sharing options...
Arcalio Posted August 31, 2014 Share Posted August 31, 2014 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 More sharing options...
Baustein Posted September 1, 2014 Share Posted September 1, 2014 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 More sharing options...
Arcalio Posted September 1, 2014 Share Posted September 1, 2014 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now