Rewrites a lot of the config command to only do the minimum necessary steps to load the changes
Adds a ConfigTag class for helping to decide the action necessary for updating a given config option Splits the color setting in PortalSignDrawer as only one color is set at a time when the /config command is used Updates the configOptions map when a config option is changed
This commit is contained in:
74
src/main/java/net/knarcraft/stargate/config/ConfigTag.java
Normal file
74
src/main/java/net/knarcraft/stargate/config/ConfigTag.java
Normal file
@@ -0,0 +1,74 @@
|
||||
package net.knarcraft.stargate.config;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* A config tag groups config values by a property
|
||||
*/
|
||||
public enum ConfigTag {
|
||||
|
||||
COLOR(new ConfigOption[]{ConfigOption.FREE_GATES_COLOR, ConfigOption.MAIN_SIGN_COLOR, ConfigOption.HIGHLIGHT_SIGN_COLOR}),
|
||||
FOLDER(new ConfigOption[]{ConfigOption.GATE_FOLDER, ConfigOption.PORTAL_FOLDER});
|
||||
|
||||
private final ConfigOption[] taggedOptions;
|
||||
|
||||
/**
|
||||
* Instantiates a new config tag
|
||||
*
|
||||
* @param taggedOptions <p>The config options included in this tag</p>
|
||||
*/
|
||||
ConfigTag(ConfigOption[] taggedOptions) {
|
||||
this.taggedOptions = taggedOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether a config tag includes the given config option
|
||||
*
|
||||
* @param option <p>The config option to check</p>
|
||||
* @return <p>True of the config option is tagged</p>
|
||||
*/
|
||||
public boolean isTagged(ConfigOption option) {
|
||||
return Arrays.stream(taggedOptions).anyMatch((item) -> item == option);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether a given config option requires a full reload to take effect
|
||||
*
|
||||
* @param option <p>The config option to check</p>
|
||||
* @return <p>True if changing the config option requires a full reload to take effect</p>
|
||||
*/
|
||||
public static boolean requiresFullReload(ConfigOption option) {
|
||||
return FOLDER.isTagged(option);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether a given config option requires a portal reload to take effect
|
||||
*
|
||||
* @param option <p>The config option to check</p>
|
||||
* @return <p>True if changing the config option requires a portal reload to take effect</p>
|
||||
*/
|
||||
public static boolean requiresPortalReload(ConfigOption option) {
|
||||
return COLOR.isTagged(option) || FOLDER.isTagged(option) || option == ConfigOption.VERIFY_PORTALS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether a given config option requires the language loader to be reloaded
|
||||
*
|
||||
* @param option <p>The config option to check</p>
|
||||
* @return <p>True if the language loader requires a reload</p>
|
||||
*/
|
||||
public static boolean requiresLanguageReload(ConfigOption option) {
|
||||
return option == ConfigOption.LANGUAGE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether a given config option requires economy to be reloaded
|
||||
*
|
||||
* @param option <p>The config option to check</p>
|
||||
* @return <p>True if economy requires a reload</p>
|
||||
*/
|
||||
public static boolean requiresEconomyReload(ConfigOption option) {
|
||||
return option == ConfigOption.USE_ECONOMY;
|
||||
}
|
||||
|
||||
}
|
@@ -31,7 +31,12 @@ public final class EconomyConfig {
|
||||
*/
|
||||
public EconomyConfig(Map<ConfigOption, Object> configOptions) {
|
||||
this.configOptions = configOptions;
|
||||
loadEconomyConfig(configOptions);
|
||||
try {
|
||||
String freeColor = (String) configOptions.get(ConfigOption.FREE_GATES_COLOR);
|
||||
PortalSignDrawer.setFreeColor(ChatColor.valueOf(freeColor.toUpperCase()));
|
||||
} catch (IllegalArgumentException | NullPointerException ignored) {
|
||||
PortalSignDrawer.setFreeColor(ChatColor.DARK_GREEN);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -220,21 +225,6 @@ public final class EconomyConfig {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads all config values related to economy
|
||||
*
|
||||
* @param configOptions <p>The loaded config options to get values from</p>
|
||||
*/
|
||||
private void loadEconomyConfig(Map<ConfigOption, Object> configOptions) {
|
||||
|
||||
try {
|
||||
String freeColor = (String) configOptions.get(ConfigOption.FREE_GATES_COLOR);
|
||||
PortalSignDrawer.setFreeColor(ChatColor.valueOf(freeColor.toUpperCase()));
|
||||
} catch (IllegalArgumentException | NullPointerException ignored) {
|
||||
PortalSignDrawer.setFreeColor(ChatColor.DARK_GREEN);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if a player can do a gate action for free
|
||||
*
|
||||
|
@@ -46,8 +46,6 @@ public final class StargateConfig {
|
||||
private String portalFolder;
|
||||
private String languageName = "en";
|
||||
|
||||
private boolean debuggingEnabled = false;
|
||||
private boolean permissionDebuggingEnabled = false;
|
||||
private final Map<ConfigOption, Object> configOptions;
|
||||
|
||||
/**
|
||||
@@ -65,6 +63,18 @@ public final class StargateConfig {
|
||||
languageLoader = new LanguageLoader(dataFolderPath + "/lang/");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a direct reference to the config option map
|
||||
*
|
||||
* <p>This reference can be used to alter the value of config options. Values should only be altered after it's
|
||||
* been verified that the value is valid.</p>
|
||||
*
|
||||
* @return <p>A reference to the config options map</p>
|
||||
*/
|
||||
public Map<ConfigOption, Object> getConfigOptionsReference() {
|
||||
return configOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finish the config setup by loading languages, gates and portals, and loading economy if vault is loaded
|
||||
*/
|
||||
@@ -81,7 +91,7 @@ public final class StargateConfig {
|
||||
languageLoader.reload();
|
||||
|
||||
messageSender = new MessageSender(languageLoader);
|
||||
if (debuggingEnabled) {
|
||||
if (isDebuggingEnabled()) {
|
||||
languageLoader.debug();
|
||||
}
|
||||
|
||||
@@ -130,7 +140,7 @@ public final class StargateConfig {
|
||||
* @return <p>Whether debugging is enabled</p>
|
||||
*/
|
||||
public boolean isDebuggingEnabled() {
|
||||
return debuggingEnabled;
|
||||
return (boolean) configOptions.get(ConfigOption.DEBUG);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -139,7 +149,7 @@ public final class StargateConfig {
|
||||
* @return <p>Whether permission debugging is enabled</p>
|
||||
*/
|
||||
public boolean isPermissionDebuggingEnabled() {
|
||||
return permissionDebuggingEnabled;
|
||||
return (boolean) configOptions.get(ConfigOption.PERMISSION_DEBUG);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -186,6 +196,17 @@ public final class StargateConfig {
|
||||
* Un-loads all loaded data
|
||||
*/
|
||||
private void unload() {
|
||||
//De-activate, close and unload all loaded portals
|
||||
unloadAllPortals();
|
||||
|
||||
//Clear all loaded gates
|
||||
GateHandler.clearGates();
|
||||
}
|
||||
|
||||
/**
|
||||
* Un-loads all loaded portals
|
||||
*/
|
||||
public void unloadAllPortals() {
|
||||
//De-activate all currently active portals
|
||||
for (Portal activePortal : activePortalsQueue) {
|
||||
activePortal.getPortalActivator().deactivate();
|
||||
@@ -201,9 +222,6 @@ public final class StargateConfig {
|
||||
|
||||
//Clear all loaded portals
|
||||
PortalRegistry.clearPortals();
|
||||
|
||||
//Clear all loaded gates
|
||||
GateHandler.clearGates();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -256,7 +274,7 @@ public final class StargateConfig {
|
||||
//Update the language loader in case the loaded language changed
|
||||
languageLoader.setChosenLanguage(languageName);
|
||||
languageLoader.reload();
|
||||
if (debuggingEnabled) {
|
||||
if (isDebuggingEnabled()) {
|
||||
languageLoader.debug();
|
||||
}
|
||||
|
||||
@@ -267,7 +285,7 @@ public final class StargateConfig {
|
||||
/**
|
||||
* Starts the listener for listening to BungeeCord messages
|
||||
*/
|
||||
private void startStopBungeeListener(boolean start) {
|
||||
public void startStopBungeeListener(boolean start) {
|
||||
Messenger messenger = Bukkit.getMessenger();
|
||||
String bungeeChannel = "BungeeCord";
|
||||
|
||||
@@ -283,7 +301,7 @@ public final class StargateConfig {
|
||||
/**
|
||||
* Reloads economy by enabling or disabling it as necessary
|
||||
*/
|
||||
private void reloadEconomy() {
|
||||
public void reloadEconomy() {
|
||||
EconomyConfig economyConfig = getEconomyConfig();
|
||||
if (economyConfig.isEconomyEnabled() && economyConfig.getEconomy() == null) {
|
||||
setupVaultEconomy();
|
||||
@@ -342,10 +360,6 @@ public final class StargateConfig {
|
||||
portalFolder = (String) configOptions.get(ConfigOption.PORTAL_FOLDER);
|
||||
gateFolder = (String) configOptions.get(ConfigOption.GATE_FOLDER);
|
||||
|
||||
//Get enabled debug settings from the config
|
||||
debuggingEnabled = (boolean) configOptions.get(ConfigOption.DEBUG);
|
||||
permissionDebuggingEnabled = (boolean) configOptions.get(ConfigOption.PERMISSION_DEBUG);
|
||||
|
||||
//If users have an outdated config, assume they also need to update their default gates
|
||||
if (isMigrating) {
|
||||
GateHandler.writeDefaultGatesToFolder(gateFolder);
|
||||
|
@@ -190,13 +190,13 @@ public final class StargateGateConfig {
|
||||
private void loadSignColor(String mainSignColor, String highlightSignColor) {
|
||||
if (mainSignColor != null && highlightSignColor != null) {
|
||||
try {
|
||||
PortalSignDrawer.setColors(ChatColor.valueOf(mainSignColor.toUpperCase()),
|
||||
ChatColor.valueOf(highlightSignColor.toUpperCase()));
|
||||
return;
|
||||
PortalSignDrawer.setMainColor(ChatColor.valueOf(highlightSignColor.toUpperCase()));
|
||||
PortalSignDrawer.setHighlightColor(ChatColor.valueOf(highlightSignColor.toUpperCase()));
|
||||
} catch (IllegalArgumentException | NullPointerException ignored) {
|
||||
Stargate.logWarning("You have specified an invalid color in your config.yml. Defaulting to BLACK and WHITE");
|
||||
PortalSignDrawer.setMainColor(ChatColor.BLACK);
|
||||
PortalSignDrawer.setHighlightColor(ChatColor.WHITE);
|
||||
}
|
||||
}
|
||||
Stargate.logWarning("You have specified an invalid color in your config.yml. Defaulting to BLACK and WHITE");
|
||||
PortalSignDrawer.setColors(ChatColor.BLACK, ChatColor.WHITE);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user