Merge auto des nouvelles options de config au demarrage

Une mise a jour du plugin qui ajoute des cles de config n'obligeait
pas a editer config.yml/config.properties a la main : les valeurs
par defaut restaient invisibles pour l'admin. Desormais, au demarrage,
les cles manquantes sont ajoutees dans le fichier existant sans
toucher aux valeurs deja personnalisees.

Spigot : merge via YamlConfiguration (perd les commentaires au
prochain rewrite, limitation Bukkit). Velocity : simple ajout de
lignes en fin de fichier, commentaires existants preserves.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
SarTron-NorthBlue
2026-07-12 14:23:58 +04:00
co-authored by Claude Sonnet 5
parent ffbeb2de66
commit a76c641b7d
3 changed files with 82 additions and 0 deletions
@@ -10,9 +10,14 @@ import fr.votenetwork.spigot.storage.MySqlPendingVoteStore;
import fr.votenetwork.spigot.storage.PendingVoteStore;
import fr.votenetwork.spigot.storage.YamlPendingVoteStore;
import fr.votenetwork.spigot.voteparty.VoteParty;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.ServicePriority;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
public class VoteNetworkSpigot extends JavaPlugin {
public static final String CHANNEL = "votenetwork:vote";
@@ -25,6 +30,7 @@ public class VoteNetworkSpigot extends JavaPlugin {
@Override
public void onEnable() {
saveDefaultConfig();
mergeMissingConfigKeys();
this.voteConfig = new VoteConfig(this);
this.maintenanceState = new MaintenanceState();
@@ -55,6 +61,43 @@ public class VoteNetworkSpigot extends JavaPlugin {
getLogger().info("VoteNetwork (Spigot) demarre.");
}
/**
* Ajoute dans config.yml les cles presentes dans le config.yml embarque dans le jar mais
* absentes du fichier existant (nouvelles options apportees par une mise a jour du plugin),
* sans jamais modifier une valeur deja definie par l'admin.
*
* Limite connue : Bukkit ne preserve pas les commentaires lors de la reecriture du fichier.
*/
private void mergeMissingConfigKeys() {
try (InputStreamReader reader = new InputStreamReader(getResource("config.yml"), StandardCharsets.UTF_8)) {
YamlConfiguration defaults = YamlConfiguration.loadConfiguration(reader);
YamlConfiguration current = YamlConfiguration.loadConfiguration(getConfigFile());
boolean changed = false;
for (String key : defaults.getKeys(true)) {
if (defaults.isConfigurationSection(key)) {
continue;
}
if (!current.isSet(key)) {
current.set(key, defaults.get(key));
changed = true;
}
}
if (changed) {
current.save(getConfigFile());
reloadConfig();
getLogger().info("config.yml mis a jour avec les nouvelles options manquantes (valeurs existantes conservees).");
}
} catch (IOException | java.io.UncheckedIOException e) {
getLogger().warning("Impossible de fusionner les nouvelles options de config.yml : " + e.getMessage());
}
}
private java.io.File getConfigFile() {
return new java.io.File(getDataFolder(), "config.yml");
}
@Override
public void onDisable() {
getServer().getServicesManager().unregisterAll(this);