diff --git a/src/main/java/io/github/dre2n/dungeonsxl/world/DResourceWorld.java b/src/main/java/io/github/dre2n/dungeonsxl/world/DResourceWorld.java
index 0fac79ee..baddc8bc 100644
--- a/src/main/java/io/github/dre2n/dungeonsxl/world/DResourceWorld.java
+++ b/src/main/java/io/github/dre2n/dungeonsxl/world/DResourceWorld.java
@@ -1,313 +1,313 @@
-/*
- * Copyright (C) 2012-2018 Frank Baumann
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package io.github.dre2n.dungeonsxl.world;
-
-import de.erethon.commons.misc.FileUtil;
-import de.erethon.commons.worldloader.WorldLoader;
-import io.github.dre2n.dungeonsxl.DungeonsXL;
-import io.github.dre2n.dungeonsxl.event.editworld.EditWorldGenerateEvent;
-import io.github.dre2n.dungeonsxl.player.DEditPlayer;
-import java.io.File;
-import java.io.IOException;
-import org.bukkit.Bukkit;
-import org.bukkit.OfflinePlayer;
-import org.bukkit.World.Environment;
-import org.bukkit.WorldCreator;
-import org.bukkit.WorldType;
-import org.bukkit.scheduler.BukkitRunnable;
-
-/**
- * This class represents unloaded worlds.
- *
- * @author Daniel Saukel
- */
-public class DResourceWorld {
-
- DungeonsXL plugin = DungeonsXL.getInstance();
- DWorldCache worlds;
-
- private File folder;
- private WorldConfig config;
- private SignData signData;
-
- public DResourceWorld(DWorldCache worlds, String name) {
- this.worlds = worlds;
-
- folder = new File(DungeonsXL.MAPS, name);
- if (!folder.exists()) {
- folder.mkdir();
- }
-
- File configFile = new File(folder, "config.yml");
- if (configFile.exists()) {
- config = new WorldConfig(configFile);
- }
-
- File signDataFile = new File(folder, "DXLData.data");
- signData = new SignData(signDataFile);
- }
-
- public DResourceWorld(DWorldCache worlds, File folder) {
- this.worlds = worlds;
-
- this.folder = folder;
-
- File configFile = new File(folder, "config.yml");
- if (configFile.exists()) {
- config = new WorldConfig(configFile);
- }
-
- File signDataFile = new File(folder, "DXLData.data");
- signData = new SignData(signDataFile);
- }
-
- /* Getters and setters */
- /**
- * @return the folder that stores the world
- */
- public File getFolder() {
- return folder;
- }
-
- /**
- * @return the name of the world
- */
- public String getName() {
- return folder.getName();
- }
-
- /**
- * @param name
- * the name to set
- */
- public void setName(String name) {
- folder.renameTo(new File(folder.getParentFile(), name));
- folder = new File(folder.getParentFile(), name);
- }
-
- /**
- * @return the WorldConfig
- */
- public WorldConfig getConfig() {
- return getConfig(false);
- }
-
- /**
- * @param generate
- * if a config should be generated if none exists
- * @return the WorldConfig
- */
- public WorldConfig getConfig(boolean generate) {
- if (config == null) {
- File file = new File(folder, "config.yml");
- if (file.exists()) {
- try {
- file.createNewFile();
- } catch (IOException exception) {
- exception.printStackTrace();
- }
- }
- config = new WorldConfig(file);
- }
-
- return config;
- }
-
- public Environment getWorldEnvironment() {
- return config != null ? config.getWorldEnvironment() : Environment.NORMAL;
- }
-
- /**
- * @return the DXLData.data file
- */
- public SignData getSignData() {
- return signData;
- }
-
- /**
- * @param player
- * the player to invite
- */
- public void addInvitedPlayer(OfflinePlayer player) {
- if (config == null) {
- config = new WorldConfig();
- }
-
- config.addInvitedPlayer(player.getUniqueId().toString());
- config.save();
- }
-
- /**
- * @param player
- * the player to uninvite
- */
- public boolean removeInvitedPlayer(OfflinePlayer player) {
- if (config == null) {
- return false;
- }
-
- config.removeInvitedPlayers(player.getUniqueId().toString(), player.getName().toLowerCase());
- config.save();
-
- DEditPlayer editPlayer = DEditPlayer.getByName(player.getName());
- if (editPlayer != null) {
- if (DEditWorld.getByWorld(editPlayer.getWorld()).getResource() == this) {
- editPlayer.leave();
- }
- }
-
- return true;
- }
-
- /**
- * @param player
- * the player to check
- */
- public boolean isInvitedPlayer(OfflinePlayer player) {
- if (config == null) {
- return false;
- }
-
- return config.getInvitedPlayers().contains(player.getName().toLowerCase()) || config.getInvitedPlayers().contains(player.getUniqueId().toString());
- }
-
- /* Actions */
- /**
- * Creates a backup of the resource
- *
- * @param async
- * whether the task shall be performed asyncronously
- */
- public void backup(boolean async) {
- BackupResourceTask task = new BackupResourceTask(this);
- if (async) {
- task.runTaskAsynchronously(plugin);
- } else {
- task.run();
- }
- }
-
- /**
- * @param game
- * whether the instance is a DGameWorld
- * @return an instance of this world
- */
- public DInstanceWorld instantiate(final boolean game) {
- int id = worlds.generateId();
- String name = worlds.generateName(game, id);
- final File instanceFolder = new File(Bukkit.getWorldContainer(), name);
-
- while (Bukkit.getWorld(name) != null) {
- id++;
- name = worlds.generateName(game, id);
- }
-
- final DInstanceWorld instance = game ? new DGameWorld(this, instanceFolder, id) : new DEditWorld(this, instanceFolder, id);
-
- if (!plugin.getMainConfig().areTweaksEnabled()) {
- FileUtil.copyDir(folder, instanceFolder, DungeonsXL.EXCLUDED_FILES);
- instance.world = Bukkit.createWorld(WorldCreator.name(name).environment(getWorldEnvironment()));
-
- if (game) {
- signData.deserializeSigns((DGameWorld) instance);
- } else {
- signData.deserializeSigns((DEditWorld) instance);
- }
-
- } else {
- new BukkitRunnable() {
- @Override
- public void run() {
- FileUtil.copyDir(folder, instanceFolder, DungeonsXL.EXCLUDED_FILES);
- instance.world = WorldLoader.createWorld(WorldCreator.name(instanceFolder.getName()).environment(getWorldEnvironment()));
-
- new BukkitRunnable() {
- @Override
- public void run() {
- if (game) {
- signData.deserializeSigns((DGameWorld) instance);
- } else {
- signData.deserializeSigns((DEditWorld) instance);
- }
- }
- }.runTask(plugin);
- }
- }.runTaskAsynchronously(plugin);
- }
-
- return instance;
- }
-
- /**
- * @return an old or a new instance of this world.
- */
- public DEditWorld instantiateAsEditWorld() {
- for (DEditWorld instance : worlds.getEditWorlds()) {
- if (instance.getName().equals(getName())) {
- return instance;
- }
- }
-
- return (DEditWorld) instantiate(false);
- }
-
- /**
- * @return a new instance of this world
- */
- public DGameWorld instantiateAsGameWorld() {
- return (DGameWorld) instantiate(true);
- }
-
- /**
- * Generate a new DResourceWorld.
- *
- * @return the automatically created DEditWorld instance
- */
- public DEditWorld generate() {
- final String name = worlds.generateName(false);
- int id = worlds.generateId();
- final File folder = new File(Bukkit.getWorldContainer(), name);
- final WorldCreator creator = new WorldCreator(name);
- creator.type(WorldType.FLAT);
- creator.generateStructures(false);
-
- final DEditWorld editWorld = new DEditWorld(this, folder, id);
-
- EditWorldGenerateEvent event = new EditWorldGenerateEvent(editWorld);
- Bukkit.getPluginManager().callEvent(event);
- if (event.isCancelled()) {
- return null;
- }
-
- if (!plugin.getMainConfig().areTweaksEnabled()) {
- editWorld.world = creator.createWorld();
-
- } else {
- new BukkitRunnable() {
- @Override
- public void run() {
- FileUtil.copyDir(DWorldCache.RAW, folder, DungeonsXL.EXCLUDED_FILES);
- editWorld.generateIdFile();
- editWorld.world = WorldLoader.createWorld(creator);
- }
- }.runTaskAsynchronously(plugin);
- }
-
- return editWorld;
- }
-
-}
+/*
+ * Copyright (C) 2012-2018 Frank Baumann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package io.github.dre2n.dungeonsxl.world;
+
+import de.erethon.commons.misc.FileUtil;
+import de.erethon.commons.worldloader.WorldLoader;
+import io.github.dre2n.dungeonsxl.DungeonsXL;
+import io.github.dre2n.dungeonsxl.event.editworld.EditWorldGenerateEvent;
+import io.github.dre2n.dungeonsxl.player.DEditPlayer;
+import java.io.File;
+import java.io.IOException;
+import org.bukkit.Bukkit;
+import org.bukkit.OfflinePlayer;
+import org.bukkit.World.Environment;
+import org.bukkit.WorldCreator;
+import org.bukkit.WorldType;
+import org.bukkit.scheduler.BukkitRunnable;
+
+/**
+ * This class represents unloaded worlds.
+ *
+ * @author Daniel Saukel
+ */
+public class DResourceWorld {
+
+ DungeonsXL plugin = DungeonsXL.getInstance();
+ DWorldCache worlds;
+
+ private File folder;
+ private WorldConfig config;
+ private SignData signData;
+
+ public DResourceWorld(DWorldCache worlds, String name) {
+ this.worlds = worlds;
+
+ folder = new File(DungeonsXL.MAPS, name);
+ if (!folder.exists()) {
+ folder.mkdir();
+ }
+
+ File configFile = new File(folder, "config.yml");
+ if (configFile.exists()) {
+ config = new WorldConfig(configFile);
+ }
+
+ File signDataFile = new File(folder, "DXLData.data");
+ signData = new SignData(signDataFile);
+ }
+
+ public DResourceWorld(DWorldCache worlds, File folder) {
+ this.worlds = worlds;
+
+ this.folder = folder;
+
+ File configFile = new File(folder, "config.yml");
+ if (configFile.exists()) {
+ config = new WorldConfig(configFile);
+ }
+
+ File signDataFile = new File(folder, "DXLData.data");
+ signData = new SignData(signDataFile);
+ }
+
+ /* Getters and setters */
+ /**
+ * @return the folder that stores the world
+ */
+ public File getFolder() {
+ return folder;
+ }
+
+ /**
+ * @return the name of the world
+ */
+ public String getName() {
+ return folder.getName();
+ }
+
+ /**
+ * @param name
+ * the name to set
+ */
+ public void setName(String name) {
+ folder.renameTo(new File(folder.getParentFile(), name));
+ folder = new File(folder.getParentFile(), name);
+ }
+
+ /**
+ * @return the WorldConfig
+ */
+ public WorldConfig getConfig() {
+ return getConfig(false);
+ }
+
+ /**
+ * @param generate
+ * if a config should be generated if none exists
+ * @return the WorldConfig
+ */
+ public WorldConfig getConfig(boolean generate) {
+ if (config == null) {
+ File file = new File(folder, "config.yml");
+ if (file.exists()) {
+ try {
+ file.createNewFile();
+ } catch (IOException exception) {
+ exception.printStackTrace();
+ }
+ }
+ config = new WorldConfig(file);
+ }
+
+ return config;
+ }
+
+ public Environment getWorldEnvironment() {
+ return (config != null && config.getWorldEnvironment() != null) ? config.getWorldEnvironment() : Environment.NORMAL;
+ }
+
+ /**
+ * @return the DXLData.data file
+ */
+ public SignData getSignData() {
+ return signData;
+ }
+
+ /**
+ * @param player
+ * the player to invite
+ */
+ public void addInvitedPlayer(OfflinePlayer player) {
+ if (config == null) {
+ config = new WorldConfig();
+ }
+
+ config.addInvitedPlayer(player.getUniqueId().toString());
+ config.save();
+ }
+
+ /**
+ * @param player
+ * the player to uninvite
+ */
+ public boolean removeInvitedPlayer(OfflinePlayer player) {
+ if (config == null) {
+ return false;
+ }
+
+ config.removeInvitedPlayers(player.getUniqueId().toString(), player.getName().toLowerCase());
+ config.save();
+
+ DEditPlayer editPlayer = DEditPlayer.getByName(player.getName());
+ if (editPlayer != null) {
+ if (DEditWorld.getByWorld(editPlayer.getWorld()).getResource() == this) {
+ editPlayer.leave();
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @param player
+ * the player to check
+ */
+ public boolean isInvitedPlayer(OfflinePlayer player) {
+ if (config == null) {
+ return false;
+ }
+
+ return config.getInvitedPlayers().contains(player.getName().toLowerCase()) || config.getInvitedPlayers().contains(player.getUniqueId().toString());
+ }
+
+ /* Actions */
+ /**
+ * Creates a backup of the resource
+ *
+ * @param async
+ * whether the task shall be performed asyncronously
+ */
+ public void backup(boolean async) {
+ BackupResourceTask task = new BackupResourceTask(this);
+ if (async) {
+ task.runTaskAsynchronously(plugin);
+ } else {
+ task.run();
+ }
+ }
+
+ /**
+ * @param game
+ * whether the instance is a DGameWorld
+ * @return an instance of this world
+ */
+ public DInstanceWorld instantiate(final boolean game) {
+ int id = worlds.generateId();
+ String name = worlds.generateName(game, id);
+ final File instanceFolder = new File(Bukkit.getWorldContainer(), name);
+
+ while (Bukkit.getWorld(name) != null) {
+ id++;
+ name = worlds.generateName(game, id);
+ }
+
+ final DInstanceWorld instance = game ? new DGameWorld(this, instanceFolder, id) : new DEditWorld(this, instanceFolder, id);
+
+ if (!plugin.getMainConfig().areTweaksEnabled()) {
+ FileUtil.copyDir(folder, instanceFolder, DungeonsXL.EXCLUDED_FILES);
+ instance.world = Bukkit.createWorld(WorldCreator.name(name).environment(getWorldEnvironment()));
+
+ if (game) {
+ signData.deserializeSigns((DGameWorld) instance);
+ } else {
+ signData.deserializeSigns((DEditWorld) instance);
+ }
+
+ } else {
+ new BukkitRunnable() {
+ @Override
+ public void run() {
+ FileUtil.copyDir(folder, instanceFolder, DungeonsXL.EXCLUDED_FILES);
+ instance.world = WorldLoader.createWorld(WorldCreator.name(instanceFolder.getName()).environment(getWorldEnvironment()));
+
+ new BukkitRunnable() {
+ @Override
+ public void run() {
+ if (game) {
+ signData.deserializeSigns((DGameWorld) instance);
+ } else {
+ signData.deserializeSigns((DEditWorld) instance);
+ }
+ }
+ }.runTask(plugin);
+ }
+ }.runTaskAsynchronously(plugin);
+ }
+
+ return instance;
+ }
+
+ /**
+ * @return an old or a new instance of this world.
+ */
+ public DEditWorld instantiateAsEditWorld() {
+ for (DEditWorld instance : worlds.getEditWorlds()) {
+ if (instance.getName().equals(getName())) {
+ return instance;
+ }
+ }
+
+ return (DEditWorld) instantiate(false);
+ }
+
+ /**
+ * @return a new instance of this world
+ */
+ public DGameWorld instantiateAsGameWorld() {
+ return (DGameWorld) instantiate(true);
+ }
+
+ /**
+ * Generate a new DResourceWorld.
+ *
+ * @return the automatically created DEditWorld instance
+ */
+ public DEditWorld generate() {
+ final String name = worlds.generateName(false);
+ int id = worlds.generateId();
+ final File folder = new File(Bukkit.getWorldContainer(), name);
+ final WorldCreator creator = new WorldCreator(name);
+ creator.type(WorldType.FLAT);
+ creator.generateStructures(false);
+
+ final DEditWorld editWorld = new DEditWorld(this, folder, id);
+
+ EditWorldGenerateEvent event = new EditWorldGenerateEvent(editWorld);
+ Bukkit.getPluginManager().callEvent(event);
+ if (event.isCancelled()) {
+ return null;
+ }
+
+ if (!plugin.getMainConfig().areTweaksEnabled()) {
+ editWorld.world = creator.createWorld();
+
+ } else {
+ new BukkitRunnable() {
+ @Override
+ public void run() {
+ FileUtil.copyDir(DWorldCache.RAW, folder, DungeonsXL.EXCLUDED_FILES);
+ editWorld.generateIdFile();
+ editWorld.world = WorldLoader.createWorld(creator);
+ }
+ }.runTaskAsynchronously(plugin);
+ }
+
+ return editWorld;
+ }
+
+}