EpicEnchants/src/main/java/com/songoda/epicenchants/managers/FileManager.java

107 lines
4.2 KiB
Java
Raw Normal View History

2019-01-16 13:01:24 +01:00
package com.songoda.epicenchants.managers;
import com.songoda.epicenchants.EpicEnchants;
2019-04-04 14:40:11 +02:00
import com.songoda.epicenchants.utils.objects.FileLocation;
2019-01-17 00:16:30 +01:00
import org.bukkit.Bukkit;
import org.bukkit.configuration.InvalidConfigurationException;
2019-01-16 13:01:24 +01:00
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
2019-01-17 00:16:30 +01:00
import java.io.IOException;
2019-08-04 23:49:57 +02:00
import java.io.InputStream;
import java.nio.file.Files;
import java.util.*;
2019-01-16 13:01:24 +01:00
2019-04-04 14:40:11 +02:00
import static com.songoda.epicenchants.utils.objects.FileLocation.of;
2019-01-16 13:01:24 +01:00
import static java.io.File.separator;
2019-01-17 00:16:30 +01:00
import static java.util.Arrays.asList;
2019-01-16 13:01:24 +01:00
2019-02-19 14:23:20 +01:00
public class FileManager extends Manager<String, FileConfiguration> {
private final String directory;
2019-04-04 14:40:11 +02:00
private final LinkedHashSet<FileLocation> files = new LinkedHashSet<>(asList(
2019-03-21 15:35:12 +01:00
of("config.yml", true),
2019-08-04 23:49:57 +02:00
of("src/main/resources/menus/main-info-menu.yml", true),
of("menus/enchanter-menu.yml", true, true),
of("menus/tinkerer-menu.yml", true, true),
of("menus/alchemist-menu.yml", true, true),
2019-08-04 23:49:57 +02:00
of("src/main/resources/menus/groups/simple-menu.yml", false),
of("src/main/resources/menus/groups/unique-menu.yml", false),
of("src/main/resources/menus/groups/elite-menu.yml", false),
of("src/main/resources/menus/groups/ultimate-menu.yml", false),
of("src/main/resources/menus/groups/legendary-menu.yml", false),
of("src/main/resources/enchants/example-enchant.yml", false),
of("src/main/resources/groups.yml", true),
of("items/special-items.yml", true, true),
of("items/dusts.yml", true, true)
2019-02-19 14:23:20 +01:00
));
2019-01-16 13:01:24 +01:00
public FileManager(EpicEnchants instance) {
2019-02-19 14:23:20 +01:00
super(instance);
directory = instance.getVersion() > 12 ? "master" : "legacy";
Bukkit.getConsoleSender().sendMessage("Using the " + directory + " configurations because version is 1." + instance.getVersion());
2019-01-16 13:01:24 +01:00
}
2019-02-19 14:23:20 +01:00
public void loadFiles() {
files.forEach(fileLocation -> {
File file = new File(instance.getDataFolder() + separator + fileLocation.getPath());
2019-01-16 13:01:24 +01:00
2019-08-04 23:49:57 +02:00
if (!file.exists() && (fileLocation.isRequired() || getConfiguration("config").getBoolean("System.First Load"))) {
2019-01-17 00:16:30 +01:00
file.getParentFile().mkdirs();
Bukkit.getConsoleSender().sendMessage("Creating file: " + fileLocation.getPath());
2019-03-21 15:35:12 +01:00
try {
2019-08-04 23:49:57 +02:00
InputStream in = instance.getResource(fileLocation.getResourcePath(directory));
if (in != null)
Files.copy(in, file.toPath());
} catch (IOException e) {
e.printStackTrace();
}
2019-01-17 00:16:30 +01:00
}
if (fileLocation.isRequired()) {
FileConfiguration configuration = new YamlConfiguration();
try {
configuration.load(file);
} catch (IOException | InvalidConfigurationException e) {
e.printStackTrace();
}
add(fileLocation.getPath().replace(".yml", ""), configuration);
}
});
2019-03-21 15:35:12 +01:00
2019-08-04 23:49:57 +02:00
getConfiguration("config").set("System.First Load", false);
2019-03-21 15:35:12 +01:00
try {
getConfiguration("config").save(new File(instance.getDataFolder() + separator + "config.yml"));
} catch (IOException e) {
e.printStackTrace();
}
2019-01-16 13:01:24 +01:00
}
2019-01-17 00:16:30 +01:00
public FileConfiguration getConfiguration(String key) {
2019-02-19 14:23:20 +01:00
return getValueUnsafe(key);
2019-01-17 00:16:30 +01:00
}
public List<File> getYmlFiles(String directory) {
File dir = new File(instance.getDataFolder() + separator + directory + separator);
File[] allFiles = dir.listFiles();
List<File> output = new ArrayList<>();
if (allFiles == null) {
return output;
}
Optional.ofNullable(dir.listFiles((dir1, filename) -> filename.endsWith(".yml"))).ifPresent(list -> {
output.addAll(Arrays.asList(list));
});
Arrays.stream(allFiles)
.filter(File::isDirectory)
.filter(s -> !s.getName().equalsIgnoreCase("old"))
.forEach(f -> output.addAll(getYmlFiles(directory + separator + f.getName())));
2019-03-21 15:35:12 +01:00
return output;
}
2019-01-16 13:01:24 +01:00
}