World Reset

Wenn ihr bei eurem Plugin nicht weiter kommt, könnt ihr hier euer Problem beschreiben und um Hilfe bitten.

World Reset

Beitragvon Summerfeeling » Mo 3. Feb 2014, 01:23

Hey,
ich code ja derzeit ein Rush Plugin, und wollte ein World Reset programmieren - was gescheitert ist -.
Mein Code:
Code: Alles auswählen
  1. package de.Summerfeeling.WorldReset;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8. import org.bukkit.Bukkit;
  9. import org.bukkit.WorldCreator;
  10. import org.bukkit.plugin.java.JavaPlugin;
  11. public class WorldReset extends JavaPlugin {
  12.    private File originaleWelt = new File("world");
  13.    private File teamplateWelt = new File("world_backup");
  14.    
  15.    public void onEnable() {
  16.       originaleWelt.delete();
  17.       try {
  18.          WorldReset.copyFolder(teamplateWelt, originaleWelt);
  19.          new File("world/uid.dat").delete();
  20.          Bukkit.createWorld(new WorldCreator("world"));
  21.       } catch (IOException e) {
  22.          Bukkit.broadcastMessage("§7[§aRush§7] §cError while copying world! (" + e.getMessage() + ")");
  23.          e.printStackTrace();
  24.       }
  25.    }
  26.    
  27.    public void onDisable() {
  28.       Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
  29.          @Override
  30.          public void run() {
  31.             Bukkit.unloadWorld("world", false);
  32.             originaleWelt.delete();
  33.          }
  34.       });
  35.    }
  36.    
  37.    public static void copyFolder(File original, File copy) throws IOException {
  38.       if(original.isDirectory()) {
  39.          if(!copy.exists()) {
  40.             copy.mkdir();
  41.             System.out.println("Ordner " + copy.getPath() + " erstellt!");
  42.          }
  43.          String[] files = original.list();
  44.          for(String file : files) {
  45.             File orgFile = new File(original, file);
  46.             File copyFile = new File(copy, file);
  47.             copyFolder(orgFile, copyFile);
  48.          }
  49.       }else{
  50.          InputStream in = new FileInputStream(original);
  51.          OutputStream out = new FileOutputStream(copy);
  52.          byte[] buffer = new byte[1024];
  53.          int length;
  54.          while((length = in.read(buffer)) > 0) {
  55.             out.write(buffer, 0, length);
  56.          }
  57.          in.close();
  58.          out.close();
  59.       }
  60.    }
  61.    
  62. }

Mir wird beim Stopp folgender Error geworfen:
Code: Alles auswählen
  1. Exception stopping the server
  2. net.minecraft.server.v1_7_R1.ExceptionWorldConflict: The save is being accessed from another location, aborting
  3.         at net.minecraft.server.v1_7_R1.WorldNBTStorage.checkSession(WorldNBTStorage.java:72) ~[craftbukkit.jar:git-Spigot-1300]
  4.         at net.minecraft.server.v1_7_R1.World.F(World.java:2688) ~[craftbukkit.jar:git-Spigot-1300]
  5.         at net.minecraft.server.v1_7_R1.WorldServer.a(WorldServer.java:812) ~[craftbukkit.jar:git-Spigot-1300]
  6.         at net.minecraft.server.v1_7_R1.WorldServer.save(WorldServer.java:796) ~[craftbukkit.jar:git-Spigot-1300]
  7.         at net.minecraft.server.v1_7_R1.MinecraftServer.saveChunks(MinecraftServer.java:364) ~[craftbukkit.jar:git-Spigot-1300]
  8.         at net.minecraft.server.v1_7_R1.MinecraftServer.stop(MinecraftServer.java:395) ~[craftbukkit.jar:git-Spigot-1300]
  9.         at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:502) [craftbukkit.jar:git-Spigot-1300]
  10.         at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Spigot-1300]

Und beim Start wird mir die Console hiermit vollgespammt.
Code: Alles auswählen
  1. [01:10:46] [Server thread/WARN]: net.minecraft.server.v1_7_R1.ExceptionWorldConflict: The save is being accessed from anothe$
  2. [01:10:46] [Server thread/WARN]:        at net.minecraft.server.v1_7_R1.WorldNBTStorage.checkSession(WorldNBTStorage.java:72)
  3. [01:10:46] [Server thread/WARN]:        at net.minecraft.server.v1_7_R1.World.F(World.java:2688)
  4. [01:10:46] [Server thread/WARN]:        at net.minecraft.server.v1_7_R1.ChunkRegionLoader.a(ChunkRegionLoader.java:129)
  5. [01:10:46] [Server thread/WARN]:        at net.minecraft.server.v1_7_R1.ChunkProviderServer.saveChunk(ChunkProviderServer.ja$
  6. [01:10:46] [Server thread/WARN]:        at net.minecraft.server.v1_7_R1.ChunkProviderServer.unloadChunks(ChunkProviderServer$
  7. [01:10:46] [Server thread/WARN]:        at net.minecraft.server.v1_7_R1.WorldServer.doTick(WorldServer.java:194)
  8. [01:10:46] [Server thread/WARN]:        at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:657)
  9. [01:10:46] [Server thread/WARN]:        at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:273)
  10. [01:10:46] [Server thread/WARN]:        at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:560)
  11. [01:10:46] [Server thread/WARN]:        at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:467)
  12. [01:10:46] [Server thread/WARN]:        at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617)


Ich will nicht wegen der Sache an meinem Rush Plugin scheitern... :/
Grüße
Summerfeeling | Timo
Benutzeravatar
Summerfeeling
 
Beiträge: 1300
Registriert: Sa 15. Jun 2013, 18:43
Wohnort: Viersen

Re: World Reset

Beitragvon IK_Raptor » Mo 3. Feb 2014, 07:45

Du kannst glaube ch einfach das automatische Speichern deaktivieren. World.setAutoSave oder so :D
Benutzeravatar
IK_Raptor
 
Beiträge: 609
Registriert: Mo 12. Aug 2013, 15:37

Re: World Reset

Beitragvon Chaineagle » Mo 3. Feb 2014, 07:53

1. Du kannst nur leere Ordner löschen.
2. Im onDisable keinen Scheduler verwenden.
3. Du musst die Welt im onEnable auch unloaden, dadurch entsteht der Fehler. Um den Fehler wegzubekommen, einfach die Welt löschen und neu drauf machen.
Benutzeravatar
Chaineagle
 
Beiträge: 621
Registriert: Mi 19. Jun 2013, 12:37
Wohnort: Kassel

Re: World Reset

Beitragvon Ch4t4r » Mo 3. Feb 2014, 08:46

Alternativ kannst du auch den server umprogrammieren, sodass er garnicht mehr speichert. .. zum löschen von vollen Ordnern musst du mit der Umgebung und unter Linux rm-rf arbeiten, oder du löscht erst alle unterdateien/Ordner.
Benutzeravatar
Ch4t4r
 
Beiträge: 455
Registriert: So 7. Jul 2013, 12:44

Re: World Reset

Beitragvon Onemeter » Mo 3. Feb 2014, 10:22

Man kann natürlich eine Liste erstellen und beim BlockBreakEvent abfragen zb wenn es ein Leaves sind das du dann den block (event.getBlock().getLocation()) dann in diese Liste einspeicherst und beim onDisable dann eine for Schleife machst wo du dann alle blöcke die in dieser Liste enthalten sind einfach zum Material.AIR umsetzt.
Ich hoffe das kann dir etwas weiter helfen.
Dazu gibt es sogar ein Bukkit event was WorldSaveEvent heisst wo man auch einige dinge ändern kann.
Zuletzt geändert von Onemeter am Mo 3. Feb 2014, 10:25, insgesamt 1-mal geändert.
Bei Fragen stehe ich gerne weiter zur verfügung und verbleibe mit freundlichen Grüßen,
Onemeter
Benutzeravatar
Onemeter
 
Beiträge: 131
Registriert: So 23. Jun 2013, 16:55
Wohnort: Bayern

Re: World Reset

Beitragvon Chaineagle » Mo 3. Feb 2014, 10:25

Alle Entities und TileEntities wären aber nicht resetted ^^
Benutzeravatar
Chaineagle
 
Beiträge: 621
Registriert: Mi 19. Jun 2013, 12:37
Wohnort: Kassel

Re: World Reset

Beitragvon Onemeter » Mo 3. Feb 2014, 10:26

Das kann man ja wiederrum auch über eine for Schleife machen :) so schwer ist das ja auch nicht.
Code: Alles auswählen
  1. for(Entity ent : Bukkit.getWorld("weltname").getEntities()){
  2.   if(!(ent instanceof Player)){
  3.     ent.remove();
  4.   }
  5. }
Bei Fragen stehe ich gerne weiter zur verfügung und verbleibe mit freundlichen Grüßen,
Onemeter
Benutzeravatar
Onemeter
 
Beiträge: 131
Registriert: So 23. Jun 2013, 16:55
Wohnort: Bayern

Re: World Reset

Beitragvon Summerfeeling » Di 4. Feb 2014, 01:42

IK_Raptor hat geschrieben:Du kannst glaube ch einfach das automatische Speichern deaktivieren. World.setAutoSave oder so :D


Das Automatischen Sichern der Welt ist aus, aber beim Server Stop, wird von Bukkit her, automatisch die Welt nochmal gespeichert^^
Grüße
Summerfeeling | Timo
Benutzeravatar
Summerfeeling
 
Beiträge: 1300
Registriert: Sa 15. Jun 2013, 18:43
Wohnort: Viersen

Re: World Reset

Beitragvon Summerfeeling » Di 4. Feb 2014, 01:45

Onemeter hat geschrieben:Man kann natürlich eine Liste erstellen und beim BlockBreakEvent abfragen zb wenn es ein Leaves sind das du dann den block (event.getBlock().getLocation()) dann in diese Liste einspeicherst und beim onDisable dann eine for Schleife machst wo du dann alle blöcke die in dieser Liste enthalten sind einfach zum Material.AIR umsetzt.
Ich hoffe das kann dir etwas weiter helfen.
Dazu gibt es sogar ein Bukkit event was WorldSaveEvent heisst wo man auch einige dinge ändern kann.


Hm. Daran hab ich auch schon gedacht (An die Listes etc.) aber ich habe gehört, das Betten da nur halb gesetzt werden, und dann wäre noch ein Problem, die Kiste bei Rush. Wie soll ich die wieder befüllen? :D
Grüße
Summerfeeling | Timo
Benutzeravatar
Summerfeeling
 
Beiträge: 1300
Registriert: Sa 15. Jun 2013, 18:43
Wohnort: Viersen

Re: World Reset

Beitragvon Summerfeeling » Di 4. Feb 2014, 01:46

BastiFreak2000 hat geschrieben:1. Du kannst nur leere Ordner löschen.
2. Im onDisable keinen Scheduler verwenden.
3. Du musst die Welt im onEnable auch unloaden, dadurch entsteht der Fehler. Um den Fehler wegzubekommen, einfach die Welt löschen und neu drauf machen.


Einfacher gesagt als getan :/
Vielleicht kannst du ja mal ein Code-Beispiel schreiben, was du mit Punkt 3 meinst.

Vielleicht hat ja jemand Ahnung, und mal Lust ein Tutorial dadrüber in den Tutorial Bereich zu schreiben. Würde bestimmt manchen helfen ;)
Grüße
Summerfeeling | Timo
Benutzeravatar
Summerfeeling
 
Beiträge: 1300
Registriert: Sa 15. Jun 2013, 18:43
Wohnort: Viersen

Nächste

Zurück zu Hilfe und Support

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 25 Gäste

cron