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;
|
2019-01-24 20:41:01 +01:00
|
|
|
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> {
|
|
|
|
|
2019-03-19 14:13:27 +01:00
|
|
|
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),
|
2019-03-25 16:33:11 +01:00
|
|
|
of("menus/enchanter-menu.yml", true, true),
|
|
|
|
of("menus/tinkerer-menu.yml", true, true),
|
2019-04-03 15:58:13 +02:00
|
|
|
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),
|
2019-03-25 16:33:11 +01:00
|
|
|
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);
|
2019-03-25 16:33:11 +01:00
|
|
|
directory = instance.getVersion() > 12 ? "master" : "legacy";
|
2019-04-03 15:58:13 +02:00
|
|
|
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() {
|
2019-03-25 16:33:11 +01:00
|
|
|
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();
|
2019-03-25 16:33:11 +01:00
|
|
|
Bukkit.getConsoleSender().sendMessage("Creating file: " + fileLocation.getPath());
|
2019-03-21 15:35:12 +01:00
|
|
|
|
2019-01-27 16:22:05 +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());
|
2019-01-27 16:22:05 +01:00
|
|
|
} catch (IOException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
2019-01-17 00:16:30 +01:00
|
|
|
}
|
|
|
|
|
2019-03-25 16:33:11 +01:00
|
|
|
if (fileLocation.isRequired()) {
|
2019-01-27 16:22:05 +01:00
|
|
|
FileConfiguration configuration = new YamlConfiguration();
|
|
|
|
try {
|
|
|
|
configuration.load(file);
|
|
|
|
} catch (IOException | InvalidConfigurationException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
2019-03-25 16:33:11 +01:00
|
|
|
add(fileLocation.getPath().replace(".yml", ""), configuration);
|
2019-01-27 16:22:05 +01:00
|
|
|
}
|
|
|
|
});
|
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
|
|
|
}
|
2019-01-24 20:41:01 +01:00
|
|
|
|
2019-03-05 16:59:00 +01:00
|
|
|
public List<File> getYmlFiles(String directory) {
|
2019-01-27 16:22:05 +01:00
|
|
|
File dir = new File(instance.getDataFolder() + separator + directory + separator);
|
2019-03-05 16:59:00 +01:00
|
|
|
File[] allFiles = dir.listFiles();
|
|
|
|
List<File> output = new ArrayList<>();
|
2019-01-24 20:41:01 +01:00
|
|
|
|
2019-03-05 16:59:00 +01:00
|
|
|
if (allFiles == null) {
|
|
|
|
return output;
|
|
|
|
}
|
2019-01-24 20:41:01 +01:00
|
|
|
|
2019-03-05 16:59:00 +01:00
|
|
|
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
|
|
|
|
2019-03-05 16:59:00 +01:00
|
|
|
return output;
|
2019-01-24 20:41:01 +01:00
|
|
|
}
|
2019-01-16 13:01:24 +01:00
|
|
|
}
|