mirror of
https://github.com/DRE2N/DungeonsXL.git
synced 2024-11-28 13:36:33 +01:00
Fix worldEnvironment; resolves #805
This commit is contained in:
parent
7ace66d8df
commit
f05d7244b6
@ -25,6 +25,7 @@ import de.erethon.dungeonsxl.api.player.PlayerCache;
|
|||||||
import de.erethon.dungeonsxl.api.sign.DungeonSign;
|
import de.erethon.dungeonsxl.api.sign.DungeonSign;
|
||||||
import de.erethon.dungeonsxl.api.world.InstanceWorld;
|
import de.erethon.dungeonsxl.api.world.InstanceWorld;
|
||||||
import de.erethon.dungeonsxl.util.commons.chat.MessageUtil;
|
import de.erethon.dungeonsxl.util.commons.chat.MessageUtil;
|
||||||
|
import de.erethon.dungeonsxl.util.commons.compatibility.Version;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
@ -45,7 +46,7 @@ public abstract class DInstanceWorld implements InstanceWorld {
|
|||||||
protected DungeonsXL plugin;
|
protected DungeonsXL plugin;
|
||||||
protected PlayerCache dPlayers;
|
protected PlayerCache dPlayers;
|
||||||
|
|
||||||
static int counter;
|
private static int counter;
|
||||||
|
|
||||||
protected Map<Block, DungeonSign> signs = new HashMap<>();
|
protected Map<Block, DungeonSign> signs = new HashMap<>();
|
||||||
private DResourceWorld resourceWorld;
|
private DResourceWorld resourceWorld;
|
||||||
@ -201,10 +202,27 @@ public abstract class DInstanceWorld implements InstanceWorld {
|
|||||||
/**
|
/**
|
||||||
* @return a name for the instance
|
* @return a name for the instance
|
||||||
* @param game whether the instance is a GameWorld
|
* @param game whether the instance is a GameWorld
|
||||||
* @param id the id to use
|
|
||||||
*/
|
*/
|
||||||
public static String generateName(boolean game, int id) {
|
public static String generateName(boolean game) {
|
||||||
return "DXL_" + (game ? "Game" : "Edit") + "_" + id;
|
String name = "DXL_" + (game ? "Game" : "Edit") + "_" + counter;
|
||||||
|
File instanceFolder = new File(Bukkit.getWorldContainer(), name);
|
||||||
|
while (instanceFolder.exists()) {
|
||||||
|
World world = Bukkit.getWorld(name);
|
||||||
|
boolean removed = false;
|
||||||
|
if (world != null && world.getPlayers().isEmpty()) {
|
||||||
|
Bukkit.unloadWorld(name, /* SPIGOT-5225 */ !Version.isAtLeast(Version.MC1_14_4));
|
||||||
|
}
|
||||||
|
if (world == null || world.getPlayers().isEmpty()) {
|
||||||
|
removed = instanceFolder.delete();
|
||||||
|
}
|
||||||
|
if (!removed) {
|
||||||
|
MessageUtil.log(DungeonsXL.getInstance(), "&6Warning: An unrecognized junk instance (&4" + name + "&6) has been found, but could not be deleted.");
|
||||||
|
counter++;
|
||||||
|
name = "DXL_" + (game ? "Game" : "Edit") + "_" + counter;
|
||||||
|
instanceFolder = new File(Bukkit.getWorldContainer(), name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -113,7 +113,7 @@ public class DResourceWorld implements ResourceWorld {
|
|||||||
public WorldConfig getConfig(boolean generate) {
|
public WorldConfig getConfig(boolean generate) {
|
||||||
if (config == null) {
|
if (config == null) {
|
||||||
File file = new File(folder, WorldConfig.FILE_NAME);
|
File file = new File(folder, WorldConfig.FILE_NAME);
|
||||||
if (file.exists()) {
|
if (!file.exists() && generate) {
|
||||||
try {
|
try {
|
||||||
file.createNewFile();
|
file.createNewFile();
|
||||||
} catch (IOException exception) {
|
} catch (IOException exception) {
|
||||||
@ -128,7 +128,7 @@ public class DResourceWorld implements ResourceWorld {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Environment getWorldEnvironment() {
|
public Environment getWorldEnvironment() {
|
||||||
return (config != null && config.getWorldEnvironment() != null) ? config.getWorldEnvironment() : Environment.NORMAL;
|
return (getConfig(false) != null && getConfig(false).getWorldEnvironment() != null) ? getConfig(false).getWorldEnvironment() : Environment.NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -178,26 +178,8 @@ public class DResourceWorld implements ResourceWorld {
|
|||||||
|
|
||||||
public DInstanceWorld instantiate(boolean game) {
|
public DInstanceWorld instantiate(boolean game) {
|
||||||
plugin.setLoadingWorld(true);
|
plugin.setLoadingWorld(true);
|
||||||
int id = DInstanceWorld.counter;
|
String name = DInstanceWorld.generateName(game);
|
||||||
String name = DInstanceWorld.generateName(game, id);
|
|
||||||
|
|
||||||
File instanceFolder = new File(Bukkit.getWorldContainer(), name);
|
File instanceFolder = new File(Bukkit.getWorldContainer(), name);
|
||||||
while (instanceFolder.exists()) {
|
|
||||||
World world = Bukkit.getWorld(name);
|
|
||||||
boolean removed = false;
|
|
||||||
if (world != null && world.getPlayers().isEmpty()) {
|
|
||||||
Bukkit.unloadWorld(name, /* SPIGOT-5225 */ !Version.isAtLeast(Version.MC1_14_4));
|
|
||||||
}
|
|
||||||
if (world == null || world.getPlayers().isEmpty()) {
|
|
||||||
removed = instanceFolder.delete();
|
|
||||||
}
|
|
||||||
if (!removed) {
|
|
||||||
MessageUtil.log(plugin, "&6Warning: An unrecognized junk instance (&4" + name + "&6) has been found, but could not be deleted.");
|
|
||||||
id++;
|
|
||||||
name = DInstanceWorld.generateName(game, id);
|
|
||||||
instanceFolder = new File(Bukkit.getWorldContainer(), name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DInstanceWorld instance = game ? new DGameWorld(plugin, this, instanceFolder) : new DEditWorld(plugin, this, instanceFolder);
|
DInstanceWorld instance = game ? new DGameWorld(plugin, this, instanceFolder) : new DEditWorld(plugin, this, instanceFolder);
|
||||||
ResourceWorldInstantiateEvent event = new ResourceWorldInstantiateEvent(this, name);
|
ResourceWorldInstantiateEvent event = new ResourceWorldInstantiateEvent(this, name);
|
||||||
@ -279,8 +261,7 @@ public class DResourceWorld implements ResourceWorld {
|
|||||||
* @return the automatically created DEditWorld instance
|
* @return the automatically created DEditWorld instance
|
||||||
*/
|
*/
|
||||||
public DEditWorld generate() {
|
public DEditWorld generate() {
|
||||||
int id = DInstanceWorld.counter;
|
String name = DInstanceWorld.generateName(false);
|
||||||
String name = DInstanceWorld.generateName(false, id);
|
|
||||||
File folder = new File(Bukkit.getWorldContainer(), name);
|
File folder = new File(Bukkit.getWorldContainer(), name);
|
||||||
WorldCreator creator = new WorldCreator(name);
|
WorldCreator creator = new WorldCreator(name);
|
||||||
creator.type(WorldType.FLAT);
|
creator.type(WorldType.FLAT);
|
||||||
|
@ -19,6 +19,7 @@ package de.erethon.dungeonsxl.world;
|
|||||||
import de.erethon.dungeonsxl.DungeonsXL;
|
import de.erethon.dungeonsxl.DungeonsXL;
|
||||||
import de.erethon.dungeonsxl.api.dungeon.GameRule;
|
import de.erethon.dungeonsxl.api.dungeon.GameRule;
|
||||||
import de.erethon.dungeonsxl.api.dungeon.GameRuleContainer;
|
import de.erethon.dungeonsxl.api.dungeon.GameRuleContainer;
|
||||||
|
import de.erethon.dungeonsxl.util.commons.misc.EnumUtil;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -67,6 +68,8 @@ public class WorldConfig extends GameRuleContainer {
|
|||||||
|
|
||||||
public void load() {
|
public void load() {
|
||||||
plugin.getGameRuleRegistry().forEach(this::updateGameRule);
|
plugin.getGameRuleRegistry().forEach(this::updateGameRule);
|
||||||
|
invitedPlayers = config.getStringList("invitedPlayers");
|
||||||
|
worldEnvironment = EnumUtil.getEnumIgnoreCase(Environment.class, config.getString("worldEnvironment", Environment.NORMAL.name()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateGameRule(GameRule rule) {
|
public void updateGameRule(GameRule rule) {
|
||||||
|
Loading…
Reference in New Issue
Block a user