Improves configuration migration, and fixes some issues
All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
Fixes incorrect dropItems instead of dropItem key in config.yml Adds some missing dropper messages to config.yml Adds proper migration keys for all known configuration options Adds a modified version of Stargate's StargateYamlConfiguration to allow retaining comments during configuration migration. Fixes the annoying "[]" is not a valid repairable item Removes the use of data keys for the global configuration
This commit is contained in:
@ -13,6 +13,7 @@ import net.knarcraft.blacksmith.command.scrapper.ScrapperConfigCommand;
|
||||
import net.knarcraft.blacksmith.command.scrapper.ScrapperConfigTabCompleter;
|
||||
import net.knarcraft.blacksmith.command.scrapper.ScrapperEditCommand;
|
||||
import net.knarcraft.blacksmith.command.scrapper.ScrapperEditTabCompleter;
|
||||
import net.knarcraft.blacksmith.config.StargateYamlConfiguration;
|
||||
import net.knarcraft.blacksmith.config.blacksmith.GlobalBlacksmithSettings;
|
||||
import net.knarcraft.blacksmith.config.scrapper.GlobalScrapperSettings;
|
||||
import net.knarcraft.blacksmith.formatting.BlacksmithTranslatableMessage;
|
||||
@ -21,15 +22,15 @@ import net.knarcraft.blacksmith.listener.PlayerListener;
|
||||
import net.knarcraft.blacksmith.manager.EconomyManager;
|
||||
import net.knarcraft.blacksmith.trait.BlacksmithTrait;
|
||||
import net.knarcraft.blacksmith.trait.ScrapperTrait;
|
||||
import net.knarcraft.blacksmith.util.ConfigHelper;
|
||||
import net.knarcraft.knarlib.formatting.StringFormatter;
|
||||
import net.knarcraft.knarlib.formatting.TranslatableTimeUnit;
|
||||
import net.knarcraft.knarlib.formatting.Translator;
|
||||
import net.knarcraft.knarlib.property.ColorConversion;
|
||||
import net.knarcraft.knarlib.util.FileHelper;
|
||||
import net.knarcraft.knarlib.util.UpdateChecker;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.plugin.PluginDescriptionFile;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
@ -40,9 +41,6 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
|
||||
/**
|
||||
@ -50,11 +48,13 @@ import java.util.logging.Level;
|
||||
*/
|
||||
public class BlacksmithPlugin extends JavaPlugin {
|
||||
|
||||
private static final String CONFIG_FILE_NAME = "config.yml";
|
||||
private static BlacksmithPlugin instance;
|
||||
private GlobalBlacksmithSettings blacksmithConfig;
|
||||
private GlobalScrapperSettings scrapperConfig;
|
||||
private static Translator translator;
|
||||
private static StringFormatter stringFormatter;
|
||||
private FileConfiguration configuration;
|
||||
|
||||
/**
|
||||
* Constructor required for MockBukkit
|
||||
@ -107,8 +107,18 @@ public class BlacksmithPlugin extends JavaPlugin {
|
||||
this.reloadConfig();
|
||||
blacksmithConfig.load();
|
||||
scrapperConfig.load();
|
||||
translator.loadLanguages(this.getDataFolder(), "en",
|
||||
this.getConfig().getString("language", "en"));
|
||||
translator.loadLanguages(this.getDataFolder(), "en", this.getConfiguration().getString(
|
||||
"language", "en"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the raw configuration
|
||||
*
|
||||
* @return <p>The raw configuration</p>
|
||||
*/
|
||||
@NotNull
|
||||
public FileConfiguration getConfiguration() {
|
||||
return this.configuration;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -139,18 +149,23 @@ public class BlacksmithPlugin extends JavaPlugin {
|
||||
instance = this;
|
||||
|
||||
//Copy default config to disk
|
||||
FileConfiguration fileConfiguration = this.getConfig();
|
||||
this.saveDefaultConfig();
|
||||
if (fileConfiguration.getString("defaults.dropItem") != null) {
|
||||
migrateConfig(fileConfiguration);
|
||||
this.saveConfig();
|
||||
this.getConfig();
|
||||
this.configuration = new StargateYamlConfiguration();
|
||||
try {
|
||||
this.configuration.load(new File(getDataFolder(), CONFIG_FILE_NAME));
|
||||
} catch (IOException | InvalidConfigurationException exception) {
|
||||
getLogger().log(Level.SEVERE, exception.getMessage());
|
||||
}
|
||||
fileConfiguration.options().copyDefaults(true);
|
||||
this.reloadConfig();
|
||||
this.saveConfig();
|
||||
this.configuration.options().copyDefaults(true);
|
||||
|
||||
// Initialize custom configuration files
|
||||
initializeConfigurations(fileConfiguration);
|
||||
this.reloadConfig();
|
||||
if (this.configuration.getString("scrapper.defaults.dropItem") == null) {
|
||||
ConfigHelper.migrateConfig(this.getDataFolder().getPath().replaceAll("\\\\", "/"), this.configuration);
|
||||
this.reloadConfig();
|
||||
}
|
||||
initializeConfigurations(this.configuration);
|
||||
|
||||
//Set up Vault integration
|
||||
if (!setUpVault()) {
|
||||
@ -174,6 +189,28 @@ public class BlacksmithPlugin extends JavaPlugin {
|
||||
() -> this.getDescription().getVersion(), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reloadConfig() {
|
||||
super.reloadConfig();
|
||||
this.configuration = new StargateYamlConfiguration();
|
||||
this.configuration.options().copyDefaults(true);
|
||||
try {
|
||||
this.configuration.load(new File(getDataFolder(), CONFIG_FILE_NAME));
|
||||
} catch (IOException | InvalidConfigurationException exception) {
|
||||
getLogger().log(Level.SEVERE, "Unable to load the configuration! Message: " + exception.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveConfig() {
|
||||
super.saveConfig();
|
||||
try {
|
||||
this.configuration.save(new File(getDataFolder(), CONFIG_FILE_NAME));
|
||||
} catch (IOException exception) {
|
||||
getLogger().log(Level.SEVERE, "Unable to save the configuration! Message: " + exception.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes custom configuration and translation
|
||||
*
|
||||
@ -256,48 +293,4 @@ public class BlacksmithPlugin extends JavaPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Changes all configuration values from the old name to the new name
|
||||
*
|
||||
* @param fileConfiguration <p>The config to read from and write to</p>
|
||||
*/
|
||||
private void migrateConfig(@NotNull FileConfiguration fileConfiguration) {
|
||||
//Save the old config just in case something goes wrong
|
||||
try {
|
||||
fileConfiguration.save(getDataFolder() + "/config.yml.old");
|
||||
} catch (IOException exception) {
|
||||
BlacksmithPlugin.getInstance().getLogger().log(Level.SEVERE, Arrays.toString(exception.getStackTrace()));
|
||||
return;
|
||||
}
|
||||
|
||||
//Read all available config migrations
|
||||
Map<String, String> migrationFields = null;
|
||||
try {
|
||||
InputStream inputStream = FileHelper.getInputStreamForInternalFile("/config-migrations.txt");
|
||||
if (inputStream != null) {
|
||||
migrationFields = FileHelper.readKeyValuePairs(FileHelper.getBufferedReaderFromInputStream(inputStream),
|
||||
"=", ColorConversion.NORMAL);
|
||||
}
|
||||
} catch (IOException exception) {
|
||||
BlacksmithPlugin.getInstance().getLogger().log(Level.SEVERE, Arrays.toString(exception.getStackTrace()));
|
||||
return;
|
||||
}
|
||||
|
||||
if (migrationFields == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
//Replace old config names with the new ones
|
||||
for (String key : migrationFields.keySet()) {
|
||||
if (fileConfiguration.contains(key)) {
|
||||
String newPath = migrationFields.get(key);
|
||||
Object oldValue = fileConfiguration.get(key);
|
||||
if (!newPath.trim().isEmpty()) {
|
||||
fileConfiguration.set(newPath, oldValue);
|
||||
}
|
||||
fileConfiguration.set(key, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user