diff --git a/easyplugin-all/pom.xml b/easyplugin-all/pom.xml
index 1edb215..a299ad3 100644
--- a/easyplugin-all/pom.xml
+++ b/easyplugin-all/pom.xml
@@ -5,7 +5,7 @@
easyplugin-parent
cc.carm.lib
- 1.1.2
+ 1.1.3
4.0.0
diff --git a/easyplugin-command/pom.xml b/easyplugin-command/pom.xml
index 48aa4cb..3a91116 100644
--- a/easyplugin-command/pom.xml
+++ b/easyplugin-command/pom.xml
@@ -5,7 +5,7 @@
easyplugin-parent
cc.carm.lib
- 1.1.2
+ 1.1.3
4.0.0
diff --git a/easyplugin-common/pom.xml b/easyplugin-common/pom.xml
index ee8c071..49482cb 100644
--- a/easyplugin-common/pom.xml
+++ b/easyplugin-common/pom.xml
@@ -5,7 +5,7 @@
easyplugin-parent
cc.carm.lib
- 1.1.2
+ 1.1.3
4.0.0
diff --git a/easyplugin-configuration/pom.xml b/easyplugin-configuration/pom.xml
index cfd4a78..698d2cc 100644
--- a/easyplugin-configuration/pom.xml
+++ b/easyplugin-configuration/pom.xml
@@ -5,7 +5,7 @@
easyplugin-parent
cc.carm.lib
- 1.1.2
+ 1.1.3
4.0.0
@@ -57,6 +57,73 @@
${project.parent.version}
provided
+
+
+
+ com.tchristofferson
+ ConfigUpdater
+ 2.0-SNAPSHOT
+ true
+ compile
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.3
+
+
+ package
+
+ shade
+
+
+ false
+
+
+
+
+
+
+ com.tchristofferson.configupdater
+ cc.carm.lib.easyplugin.configuration.updater
+
+
+
+
+ *:*
+
+ META-INF/MANIFEST.MF
+ META-INF/*.txt
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/cast/ConfigStringCast.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/cast/ConfigStringCast.java
index 8a8a065..db34d90 100644
--- a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/cast/ConfigStringCast.java
+++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/cast/ConfigStringCast.java
@@ -49,10 +49,7 @@ public class ConfigStringCast extends FileConfigCachedValue {
}
public void set(@Nullable String value) {
- getSourceOptional().ifPresent(source -> {
- source.getConfig().set(getSectionName(), value);
- source.save();
- });
+ setIfPresent(value, true);
}
}
diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfig.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfig.java
index 26469ac..9bcc18d 100644
--- a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfig.java
+++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfig.java
@@ -1,15 +1,17 @@
package cc.carm.lib.easyplugin.configuration.file;
+import com.tchristofferson.configupdater.ConfigUpdater;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.io.File;
-import java.io.IOException;
+import java.io.*;
import java.util.function.Supplier;
+@SuppressWarnings("ResultOfMethodCallIgnored")
public class FileConfig {
public static Supplier pluginConfiguration = null;
@@ -28,34 +30,69 @@ public class FileConfig {
private long updateTime;
private final JavaPlugin plugin;
+ private final File fileFolder;
private final String fileName;
-
+ private final String resourcePath;
private File file;
private FileConfiguration config;
- public FileConfig(final JavaPlugin plugin) {
+ public FileConfig(@NotNull JavaPlugin plugin) throws IOException {
this(plugin, "config.yml");
}
- public FileConfig(final JavaPlugin plugin, final String name) {
+ public FileConfig(@NotNull JavaPlugin plugin,
+ @NotNull String fileName) throws IOException {
+ this(plugin, fileName, fileName);
+ }
+
+ public FileConfig(@NotNull JavaPlugin plugin, @NotNull String resourcePath,
+ @NotNull String fileName) throws IOException {
+ this(plugin, resourcePath, plugin.getDataFolder(), fileName);
+ }
+
+ public FileConfig(@NotNull JavaPlugin plugin, @NotNull String resourcePath,
+ @NotNull File fileFolder, @NotNull String fileName) throws IOException {
this.plugin = plugin;
- this.fileName = name;
+ this.resourcePath = resourcePath;
+ this.fileFolder = fileFolder;
+ this.fileName = fileName;
+
initFile();
}
- private void initFile() {
- this.updateTime = System.currentTimeMillis();
- this.file = new File(plugin.getDataFolder(), fileName);
- if (!this.file.exists()) {
- if (!this.file.getParentFile().exists()) {
- boolean success = this.file.getParentFile().mkdirs();
+ private void initFile() throws IOException {
+ if (!getFileFolder().exists()) getFileFolder().mkdirs();
+ this.file = new File(getFileFolder(), fileName);
+
+ if (!file.exists()) {
+ InputStream resourceStream = plugin.getResource(resourcePath);
+ if (resourceStream == null) {
+ throw new IOException("The resource " + resourcePath + " cannot find in " + plugin.getName() + " !");
}
- plugin.saveResource(fileName, true);
+
+ OutputStream out = new FileOutputStream(file);
+ byte[] buffer = new byte[1024];
+
+ int readBytes;
+ while ((readBytes = resourceStream.read(buffer)) > 0) {
+ out.write(buffer, 0, readBytes);
+ }
+
+ out.close();
+ resourceStream.close();
+
+ ConfigUpdater.update(plugin, resourcePath, file); // Save comments
}
+
+ this.updateTime = System.currentTimeMillis();
this.config = YamlConfiguration.loadConfiguration(this.file);
}
+ public File getFileFolder() {
+ return fileFolder;
+ }
+
public File getFile() {
return file;
}
@@ -64,15 +101,16 @@ public class FileConfig {
return config;
}
- public void save() {
- try {
- getConfig().save(getFile());
- } catch (IOException e) {
- e.printStackTrace();
- }
+ public JavaPlugin getPlugin() {
+ return plugin;
}
- public void reload() {
+ public void save() throws IOException {
+ getConfig().save(getFile());
+ ConfigUpdater.update(plugin, resourcePath, file); // Save comments
+ }
+
+ public void reload() throws IOException {
this.updateTime = System.currentTimeMillis();
if (getFile().exists()) {
this.config = YamlConfiguration.loadConfiguration(getFile());
diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfigValue.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfigValue.java
index d8aac74..1d1205b 100644
--- a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfigValue.java
+++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfigValue.java
@@ -4,6 +4,7 @@ import org.bukkit.configuration.file.FileConfiguration;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.Map;
import java.util.Optional;
public abstract class FileConfigValue {
@@ -25,7 +26,29 @@ public abstract class FileConfigValue {
}
public void save() {
- getSourceOptional().ifPresent(FileConfig::save);
+ getSourceOptional().ifPresent(fileConfig -> {
+ try {
+ fileConfig.save();
+ } catch (Exception ex) {
+ fileConfig.getPlugin().getLogger().severe("Could not save the " + fileConfig.getFile() + " .");
+ ex.printStackTrace();
+ }
+ });
+ }
+
+ public void setIfPresent(@Nullable Object value, boolean save) {
+ getConfigOptional().ifPresent(configuration -> configuration.set(getSectionName(), value));
+ if (save) save();
+ }
+
+ public void createSection(Map, ?> values) {
+ getConfigOptional().ifPresent(configuration -> {
+ if (values == null) {
+ configuration.set(getSectionName(), null);
+ } else {
+ configuration.createSection(getSectionName(), values);
+ }
+ });
}
public @Nullable FileConfig getSource() {
diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValue.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValue.java
index 948e704..0bd66fb 100644
--- a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValue.java
+++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValue.java
@@ -32,8 +32,14 @@ public class ConfigValue extends FileConfigValue {
public V get() {
return getConfigOptional()
- .map(config -> castValue(config.get(getSectionName()), clazz, this.defaultValue))
- .orElse(setDefault()); // 如果没有默认值,就把配置写进去,便于配置
+ .map(config -> {
+ if (config.contains(getSectionName())) {
+ return castValue(config.get(getSectionName()), clazz, this.defaultValue);
+ } else {
+ return setDefault(); // 如果没有默认值,就把配置写进去,便于配置
+ }
+ })
+ .orElse(defaultValue);
}
public @NotNull Optional getOptional() {
@@ -41,10 +47,7 @@ public class ConfigValue extends FileConfigValue {
}
public void set(@Nullable V value) {
- getSourceOptional().ifPresent(source -> {
- source.getConfig().set(getSectionName(), value);
- source.save();
- });
+ setIfPresent(value, true);
}
public V setDefault() {
diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueList.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueList.java
index 32ffcfa..80a823a 100644
--- a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueList.java
+++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueList.java
@@ -57,10 +57,7 @@ public class ConfigValueList extends FileConfigValue {
}
public void set(@Nullable ArrayList value) {
- getSourceOptional().ifPresent(source -> {
- source.getConfig().set(getSectionName(), value);
- source.save();
- });
+ setIfPresent(value, true);
}
diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueMap.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueMap.java
index 9087c6d..6a61485 100644
--- a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueMap.java
+++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueMap.java
@@ -50,10 +50,7 @@ public class ConfigValueMap extends FileConfigCachedValue