From 298835be42ee1811cee956d48db178bb221d8705 Mon Sep 17 00:00:00 2001 From: Myles Date: Mon, 11 Sep 2017 13:10:54 +0100 Subject: [PATCH] Move config to assets/viaversion & refactor Config Config loading is done by the implementing class. Platforms can now specify the URL of the default config. --- .../bukkit/platform/BukkitConfigAPI.java | 8 ++++++++ .../bungee/platform/BungeeConfigAPI.java | 8 ++++++++ .../java/us/myles/ViaVersion/util/Config.java | 11 +++++++++-- .../{ => assets/viaversion}/config.yml | 0 .../us/myles/ViaVersion/SpongePlugin.java | 3 ++- .../sponge/platform/SpongeConfigAPI.java | 19 ++++++++++++++++++- 6 files changed, 45 insertions(+), 4 deletions(-) rename common/src/main/resources/{ => assets/viaversion}/config.yml (100%) diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitConfigAPI.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitConfigAPI.java index 549bc32f4..b4ccbc593 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitConfigAPI.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitConfigAPI.java @@ -6,6 +6,7 @@ import us.myles.ViaVersion.api.ViaVersionConfig; import us.myles.ViaVersion.util.Config; import java.io.File; +import java.net.URL; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -15,6 +16,8 @@ public class BukkitConfigAPI extends Config implements ViaVersionConfig { public BukkitConfigAPI() { super(new File(((ViaVersionPlugin) Via.getPlatform()).getDataFolder(), "config.yml")); + // Load config + reloadConfig(); } @Override @@ -177,6 +180,11 @@ public class BukkitConfigAPI extends Config implements ViaVersionConfig { return getString("reload-disconnect-msg", "Server reload, please rejoin!"); } + @Override + public URL getDefaultConfigURL() { + return BukkitConfigAPI.class.getClassLoader().getResource("assets/viaversion/config.yml"); + } + @Override protected void handleConfig(Map config) { // Nothing currently diff --git a/bungee/src/main/java/us/myles/ViaVersion/bungee/platform/BungeeConfigAPI.java b/bungee/src/main/java/us/myles/ViaVersion/bungee/platform/BungeeConfigAPI.java index bf7e6a28e..a69b8e056 100644 --- a/bungee/src/main/java/us/myles/ViaVersion/bungee/platform/BungeeConfigAPI.java +++ b/bungee/src/main/java/us/myles/ViaVersion/bungee/platform/BungeeConfigAPI.java @@ -6,6 +6,7 @@ import us.myles.ViaVersion.bungee.providers.BungeeVersionProvider; import us.myles.ViaVersion.util.Config; import java.io.File; +import java.net.URL; import java.util.*; public class BungeeConfigAPI extends Config implements ViaVersionConfig { @@ -13,6 +14,13 @@ public class BungeeConfigAPI extends Config implements ViaVersionConfig { public BungeeConfigAPI(File configFile) { super(new File(configFile, "config.yml")); + // Load config + reloadConfig(); + } + + @Override + public URL getDefaultConfigURL() { + return BungeeConfigAPI.class.getClassLoader().getResource("assets/viaversion/config.yml"); } @Override diff --git a/common/src/main/java/us/myles/ViaVersion/util/Config.java b/common/src/main/java/us/myles/ViaVersion/util/Config.java index 9bf099723..9ae712629 100644 --- a/common/src/main/java/us/myles/ViaVersion/util/Config.java +++ b/common/src/main/java/us/myles/ViaVersion/util/Config.java @@ -29,14 +29,21 @@ public abstract class Config implements ConfigurationProvider { private final File configFile; private ConcurrentSkipListMap config; + /** + * Create a new Config instance, this will *not* load the config by default. + * To load config see {@link #reloadConfig()} + * + * @param configFile The location of where the config is loaded/saved. + */ public Config(File configFile) { this.configFile = configFile; - reloadConfig(); } + public abstract URL getDefaultConfigURL(); + public synchronized Map loadConfig(File location) { List unsupported = getUnsupportedOptions(); - URL jarConfigFile = Config.class.getClassLoader().getResource("config.yml"); + URL jarConfigFile = getDefaultConfigURL(); try { commentStore.storeComments(jarConfigFile.openStream()); for (String option : unsupported) { diff --git a/common/src/main/resources/config.yml b/common/src/main/resources/assets/viaversion/config.yml similarity index 100% rename from common/src/main/resources/config.yml rename to common/src/main/resources/assets/viaversion/config.yml diff --git a/sponge/src/main/java/us/myles/ViaVersion/SpongePlugin.java b/sponge/src/main/java/us/myles/ViaVersion/SpongePlugin.java index 15294f8a9..b5ba95b7d 100644 --- a/sponge/src/main/java/us/myles/ViaVersion/SpongePlugin.java +++ b/sponge/src/main/java/us/myles/ViaVersion/SpongePlugin.java @@ -3,6 +3,7 @@ package us.myles.ViaVersion; import com.google.gson.JsonObject; import com.google.inject.Inject; import org.spongepowered.api.Game; +import org.spongepowered.api.Sponge; import org.spongepowered.api.config.DefaultConfig; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.event.Listener; @@ -62,7 +63,7 @@ public class SpongePlugin implements ViaPlatform { // Setup Logger logger = new LoggerWrapper(container.getLogger()); // Setup Plugin - conf = new SpongeConfigAPI(defaultConfig.getParentFile()); + conf = new SpongeConfigAPI(container, defaultConfig.getParentFile()); syncExecutor = game.getScheduler().createSyncExecutor(this); asyncExecutor = game.getScheduler().createAsyncExecutor(this); SpongeCommandHandler commandHandler = new SpongeCommandHandler(); diff --git a/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeConfigAPI.java b/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeConfigAPI.java index ba7222976..5910be1f1 100644 --- a/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeConfigAPI.java +++ b/sponge/src/main/java/us/myles/ViaVersion/sponge/platform/SpongeConfigAPI.java @@ -1,18 +1,35 @@ package us.myles.ViaVersion.sponge.platform; +import org.spongepowered.api.asset.Asset; +import org.spongepowered.api.plugin.PluginContainer; import us.myles.ViaVersion.api.ViaVersionConfig; import us.myles.ViaVersion.util.Config; import java.io.File; +import java.net.URL; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Optional; public class SpongeConfigAPI extends Config implements ViaVersionConfig { private static List UNSUPPORTED = Arrays.asList("anti-xray-patch", "bungee-ping-interval", "bungee-ping-save", "bungee-servers"); + private final PluginContainer pluginContainer; - public SpongeConfigAPI(File configFile) { + public SpongeConfigAPI(PluginContainer pluginContainer, File configFile) { super(new File(configFile, "config.yml")); + this.pluginContainer = pluginContainer; + // Load config + reloadConfig(); + } + + @Override + public URL getDefaultConfigURL() { + Optional config = pluginContainer.getAsset("config.yml"); + if (!config.isPresent()) { + throw new IllegalArgumentException("Default config is missing from jar"); + } + return config.get().getUrl(); } @Override