Reimplement ShadowRanger's configuration updater and path changes

Bumped version for release
This commit is contained in:
ShadowRanger 2016-11-26 16:57:03 -05:00 committed by Jikoo
parent 8a6b98614f
commit f11d60f78c
3 changed files with 133 additions and 29 deletions

View file

@ -0,0 +1,125 @@
package com.lishid.openinv;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.configuration.ConfigurationSection;
public class ConfigUpdater {
private static final int CONFIG_VERSION = 2;
private final OpenInv plugin;
public ConfigUpdater(OpenInv plugin) {
this.plugin = plugin;
}
private int getConfigVersion() {
return plugin.getConfig().getInt("config-version", 1);
}
private boolean isConfigOutdated() {
return getConfigVersion() < CONFIG_VERSION;
}
public void checkForUpdates() {
if (isConfigOutdated()) {
plugin.getLogger().info("Configuration update found! Performing update...");
performUpdate();
plugin.getLogger().info("Configuration update complete!");
}
}
private void performUpdate() {
// Update according to the right version
switch (getConfigVersion()) {
case 1:
updateConfig1To2();
break;
}
}
private void updateConfig1To2() {
// Backup the old config file
try {
plugin.getConfig().save(new File(plugin.getDataFolder(), "config_old.yml"));
plugin.getLogger().info("Backed up config.yml to config_old.yml before updating.");
} catch (IOException e) {
plugin.getLogger().warning("Could not back up config.yml before updating!");
}
// Get the old config settings
int itemOpenInvItemId = plugin.getConfig().getInt("ItemOpenInvItemID", 280);
plugin.getConfig().set("ItemOpenInvItemID", null);
boolean notifySilentChest = plugin.getConfig().getBoolean("NotifySilentChest", true);
plugin.getConfig().set("NotifySilentChest", null);
boolean notifyAnyChest = plugin.getConfig().getBoolean("NotifyAnyChest", true);
plugin.getConfig().set("NotifyAnyChest", null);
updateToggles("AnyChest", ".toggle", "toggles.any-chest");
updateToggles("ItemOpenInv", ".toggle", "toggles.items.open-inv");
updateToggles("SilentChest", ".toggle", "toggles.silent-chest");
plugin.getConfig().set("config-version", 2);
plugin.getConfig().set("items.open-inv", getMaterialById(itemOpenInvItemId).toString());
plugin.getConfig().set("notify.any-chest", notifyAnyChest);
plugin.getConfig().set("notify.silent-chest", notifySilentChest);
// Save the new config
plugin.saveConfig();
}
private void updateToggles(String sectionName, String suffix, String newSectionName) {
// Ensure section exists
if (!plugin.getConfig().isConfigurationSection(sectionName)) {
return;
}
ConfigurationSection section = plugin.getConfig().getConfigurationSection(sectionName);
Set<String> keys = section.getKeys(false);
// Ensure section has content
if (keys == null || keys.isEmpty()) {
return;
}
Map<String, Boolean> toggles = new HashMap<String, Boolean>();
for (String playerName : keys) {
OfflinePlayer player = plugin.matchPlayer(playerName);
String dataID = plugin.getPlayerID(player);
toggles.put(dataID, section.getBoolean(playerName + suffix, false));
}
// Wipe old ConfigurationSection
plugin.getConfig().set(sectionName, null);
// Prepare new ConfigurationSection
if (plugin.getConfig().isConfigurationSection(newSectionName)) {
section = plugin.getConfig().getConfigurationSection(newSectionName);
} else {
section = plugin.getConfig().createSection(newSectionName);
}
// Set new values
for (Map.Entry<String, Boolean> entry : toggles.entrySet()) {
section.set(entry.getKey(), entry.getValue());
}
}
@SuppressWarnings("deprecation")
private Material getMaterialById(int id) {
Material material = Material.getMaterial(id);
if (material == null) {
material = Material.STICK;
}
return material;
}
}

View file

@ -41,7 +41,6 @@ import com.lishid.openinv.util.Function;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.command.PluginCommand; import org.bukkit.command.PluginCommand;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.HumanEntity; import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
@ -118,27 +117,7 @@ public class OpenInv extends JavaPlugin {
inventoryAccess = accessor.newInventoryAccess(); inventoryAccess = accessor.newInventoryAccess();
anySilentContainer = accessor.newAnySilentContainer(); anySilentContainer = accessor.newAnySilentContainer();
FileConfiguration config = getConfig(); new ConfigUpdater(this).checkForUpdates();
boolean dirtyConfig = false;
if (!config.isBoolean("NotifySilentChest")) {
config.set("NotifySilentChest", true);
dirtyConfig = true;
}
if (!config.isBoolean("NotifyAnyChest")) {
config.set("NotifyAnyChest", true);
dirtyConfig = true;
}
if (!config.isBoolean("DisableSaving")) {
config.set("DisableSaving", false);
dirtyConfig = true;
}
config.addDefault("NotifySilentChest", true);
config.addDefault("NotifyAnyChest", true);
config.addDefault("DisableSaving", false);
config.options().copyDefaults(true);
if (dirtyConfig) {
saveConfig();
}
pm.registerEvents(new OpenInvPlayerListener(this), this); pm.registerEvents(new OpenInvPlayerListener(this), this);
pm.registerEvents(new OpenInvInventoryListener(this), this); pm.registerEvents(new OpenInvInventoryListener(this), this);
@ -256,7 +235,7 @@ public class OpenInv extends JavaPlugin {
* @return true unless configured otherwise * @return true unless configured otherwise
*/ */
public boolean notifySilentChest() { public boolean notifySilentChest() {
return getConfig().getBoolean("NotifySilentChest", true); return getConfig().getBoolean("notify.silent-chest", true);
} }
/** /**
@ -266,7 +245,7 @@ public class OpenInv extends JavaPlugin {
* @return true unless configured otherwise * @return true unless configured otherwise
*/ */
public boolean notifyAnyChest() { public boolean notifyAnyChest() {
return getConfig().getBoolean("NotifyAnyChest", true); return getConfig().getBoolean("notify.any-chest", true);
} }
/** /**
@ -276,7 +255,7 @@ public class OpenInv extends JavaPlugin {
* @return true if SilentChest is enabled * @return true if SilentChest is enabled
*/ */
public boolean getPlayerSilentChestStatus(OfflinePlayer player) { public boolean getPlayerSilentChestStatus(OfflinePlayer player) {
return getConfig().getBoolean("SilentChest." + playerLoader.getPlayerDataID(player) + ".toggle", false); return getConfig().getBoolean("toggles.silent-chest." + playerLoader.getPlayerDataID(player), false);
} }
/** /**
@ -286,7 +265,7 @@ public class OpenInv extends JavaPlugin {
* @param status the status * @param status the status
*/ */
public void setPlayerSilentChestStatus(OfflinePlayer player, boolean status) { public void setPlayerSilentChestStatus(OfflinePlayer player, boolean status) {
getConfig().set("SilentChest." + playerLoader.getPlayerDataID(player) + ".toggle", status); getConfig().set("toggles.silent-chest." + playerLoader.getPlayerDataID(player), status);
saveConfig(); saveConfig();
} }
@ -297,7 +276,7 @@ public class OpenInv extends JavaPlugin {
* @return true if AnyChest is enabled * @return true if AnyChest is enabled
*/ */
public boolean getPlayerAnyChestStatus(OfflinePlayer player) { public boolean getPlayerAnyChestStatus(OfflinePlayer player) {
return getConfig().getBoolean("AnyChest." + playerLoader.getPlayerDataID(player) + ".toggle", true); return getConfig().getBoolean("toggles.any-chest." + playerLoader.getPlayerDataID(player), false);
} }
/** /**
@ -307,7 +286,7 @@ public class OpenInv extends JavaPlugin {
* @param status the status * @param status the status
*/ */
public void setPlayerAnyChestStatus(OfflinePlayer player, boolean status) { public void setPlayerAnyChestStatus(OfflinePlayer player, boolean status) {
getConfig().set("AnyChest." + playerLoader.getPlayerDataID(player) + ".toggle", status); getConfig().set("toggles.silent-chest." + playerLoader.getPlayerDataID(player), status);
saveConfig(); saveConfig();
} }

View file

@ -10,7 +10,7 @@
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<openinv.version>3.0.0-SNAPSHOT</openinv.version> <openinv.version>3.0.1</openinv.version>
</properties> </properties>
<profiles> <profiles>