-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAzaleaConfigurationApi.java
More file actions
102 lines (80 loc) · 3.72 KB
/
AzaleaConfigurationApi.java
File metadata and controls
102 lines (80 loc) · 3.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package net.azalealibrary.configuration;
import net.azalealibrary.command.AzaleaException;
import org.bukkit.plugin.Plugin;
import javax.annotation.Nullable;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public final class AzaleaConfigurationApi {
private static final List<Configuration> CONFIGURATIONS = new ArrayList<>();
public static List<Configuration> getConfigurations() {
return CONFIGURATIONS;
}
public static @Nullable Configuration getConfiguration(String name) {
return CONFIGURATIONS.stream().filter(c -> c.getName().equals(name)).findFirst().orElse(null);
}
public static <C extends Configurable> C register(C configurable) {
Configuration configuration = getConfiguration(configurable.getName());
if (configuration != null) {
configuration.merge(configurable);
} else {
Configuration newConfiguration = new Configuration(configurable.getName());
newConfiguration.merge(configurable);
CONFIGURATIONS.add(newConfiguration);
}
return configurable;
}
public static <C extends Configurable> C unregister(C configurable) {
Configuration configuration = getConfiguration(configurable.getName());
if (configuration != null) {
configuration.unmerge(configurable);
}
return configurable;
}
public static void load(Plugin plugin, Configurable configurable) {
getFileConfiguration(plugin, configurable.getName()).load(configurable);
register(configurable);
}
public static void unload(Plugin plugin, Configurable configurable) {
save(plugin, configurable);
unregister(configurable);
}
public static void save(Plugin plugin, Configurable configurable) {
getFileConfiguration(plugin, configurable.getName()).save(configurable);
}
public static FileConfiguration getFileConfiguration(Plugin plugin, String name) {
return getFileConfiguration(plugin, "/", name);
}
public static FileConfiguration getFileConfiguration(Plugin plugin, String path, String name) {
File directory = new File(plugin.getDataFolder(), path);
if (!directory.exists() & !directory.mkdir() || !directory.isDirectory()) {
throw new AzaleaException(directory.getName() + " is not a directory.");
}
File file = new File(directory, name + ".yml");
try {
if (!file.exists() & !file.createNewFile()) {
throw new AzaleaException(directory.getName() + " is not a directory.");
}
} catch (Exception exception) {
throw new AzaleaException("Could not create configuration file '" + name + "'.", exception);
}
return new FileConfiguration(plugin, file);
}
public static List<FileConfiguration> getAllFileConfigurations(Plugin plugin) {
return getAllFileConfigurations(plugin, "/");
}
public static List<FileConfiguration> getAllFileConfigurations(Plugin plugin, String path) {
File directory = new File(plugin.getDataFolder(), path);
if (!directory.exists() & !directory.mkdir() || !directory.isDirectory()) {
throw new AzaleaException(directory.getName() + " is not a directory.");
}
File[] files = directory.listFiles(file -> {
String name = file.getName();
int dotIndex = name.lastIndexOf('.');
String extension = dotIndex > 0 ? name.substring(dotIndex + 1) : "";
return extension.equals("yaml") || extension.equals("yml");
});
return files != null ? Arrays.stream(files).map(f -> new FileConfiguration(plugin, f)).toList() : List.of();
}
}