Support worlds being deleted mid-game.
This commit is contained in:
parent
699b551562
commit
899bb08a80
5
pom.xml
5
pom.xml
@ -50,6 +50,11 @@
|
||||
<artifactId>jansi</artifactId>
|
||||
<version>1.17.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.onarandombox.multiversecore</groupId>
|
||||
<artifactId>Multiverse-Core</artifactId>
|
||||
<version>2.5.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
@ -123,6 +123,23 @@ public class ConfigurationFile {
|
||||
this.file = YamlConfiguration.loadConfiguration(inputStreamReader);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete this configuration file, non-jar only.
|
||||
*
|
||||
* @param plugin JavaPlugin.
|
||||
*/
|
||||
public void delete(JavaPlugin plugin) {
|
||||
|
||||
// Create file reference.
|
||||
File fileReference = new File(plugin.getDataFolder(), this.name);
|
||||
|
||||
// Nullify reference.
|
||||
this.file = null;
|
||||
|
||||
// Delete file.
|
||||
fileReference.delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to copy the default configuration file from the given plugin's
|
||||
* jar to the data folder.
|
||||
|
@ -17,16 +17,21 @@ package com.gmail.bleedobsidian.itemcase.configurations;
|
||||
import com.gmail.bleedobsidian.itemcase.ConfigurationFile;
|
||||
import com.gmail.bleedobsidian.itemcase.ItemCaseCore;
|
||||
import com.gmail.bleedobsidian.itemcase.Itemcase;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import org.apache.commons.multiverse.io.FileUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
/**
|
||||
* A configuration file that holds all Itemcase saves for a specific world.
|
||||
@ -161,4 +166,22 @@ public class WorldFile extends ConfigurationFile {
|
||||
// Return list of loaded itemcases.
|
||||
return itemcases;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete directory and config.
|
||||
*
|
||||
* @throws IOException
|
||||
*/
|
||||
public void deleteDirectory() throws IOException {
|
||||
|
||||
// Create file reference.
|
||||
File fileReference = new File(ItemCaseCore.instance.getDataFolder(),
|
||||
this.world.getName());
|
||||
|
||||
// Nullify reference.
|
||||
this.file = null;
|
||||
|
||||
// Delete directory.
|
||||
FileUtils.deleteDirectory(fileReference);
|
||||
}
|
||||
}
|
||||
|
@ -17,9 +17,13 @@ package com.gmail.bleedobsidian.itemcase.managers;
|
||||
import com.gmail.bleedobsidian.itemcase.ItemCaseCore;
|
||||
import com.gmail.bleedobsidian.itemcase.Itemcase;
|
||||
import com.gmail.bleedobsidian.itemcase.configurations.WorldFile;
|
||||
import com.onarandombox.MultiverseCore.event.MVWorldDeleteEvent;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
@ -260,6 +264,36 @@ public final class ItemcaseManager {
|
||||
// Request itemcases to be loaded.
|
||||
ItemcaseManager.this.loadItemcases(world);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onWorldDeleteEvent(MVWorldDeleteEvent event) {
|
||||
|
||||
// Get world name.
|
||||
String worldName = event.getWorld().getName();
|
||||
|
||||
// For every entry.
|
||||
for(Entry<World, WorldFile> entry :
|
||||
ItemcaseManager.this.worldFiles.entrySet()) {
|
||||
|
||||
// Check if world name matches.
|
||||
if(entry.getKey().getName() == worldName) {
|
||||
|
||||
// Attempt to delete config.
|
||||
try {
|
||||
|
||||
// Delete config.
|
||||
entry.getValue().deleteDirectory();
|
||||
|
||||
} catch (IOException e) {
|
||||
|
||||
// Log error.
|
||||
ItemCaseCore.instance.getConsoleLogger().severe(
|
||||
"Failed to delete itemcase config for world:"
|
||||
+ worldName, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user