From 987efea2038a9d9eef815b3ce08b011ca40c7b09 Mon Sep 17 00:00:00 2001 From: Amaury Carrade Date: Sat, 21 May 2016 13:37:04 +0200 Subject: [PATCH] The plugin configuration now uses the zLib config mecanisms. * NEW: now using the zLib configuration component to manage the configuration. --- .../fr/moribus/imageonmap/ImageOnMap.java | 5 +- .../fr/moribus/imageonmap/MetricsLite.java | 4 +- .../imageonmap/PluginConfiguration.java | 112 ++---------------- .../fr/moribus/imageonmap/gui/MapListGui.java | 5 +- .../image/ImageRendererExecutor.java | 2 +- .../fr/moribus/imageonmap/map/MapManager.java | 20 ++-- .../imageonmap/map/PlayerMapStore.java | 4 +- src/main/resources/config.yml | 13 ++ 8 files changed, 43 insertions(+), 122 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java index cf68378..e030b1f 100644 --- a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java +++ b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java @@ -86,10 +86,11 @@ public final class ImageOnMap extends ZPlugin return; } - loadComponents(Gui.class, Commands.class, ImageIOExecutor.class, ImageRendererExecutor.class); + saveDefaultConfig(); + + loadComponents(Gui.class, Commands.class, PluginConfiguration.class, ImageIOExecutor.class, ImageRendererExecutor.class); //Init all the things ! - PluginConfiguration.init(this); MetricsLite.startMetrics(); MapManager.init(); MapInitEvent.init(); diff --git a/src/main/java/fr/moribus/imageonmap/MetricsLite.java b/src/main/java/fr/moribus/imageonmap/MetricsLite.java index 2bc1cef..c742518 100644 --- a/src/main/java/fr/moribus/imageonmap/MetricsLite.java +++ b/src/main/java/fr/moribus/imageonmap/MetricsLite.java @@ -55,10 +55,10 @@ public class MetricsLite /** * Starts MetricsLite, unless disabled in config */ - static public void startMetrics() { - if(!PluginConfiguration.COLLECT_DATA.getBoolean()) return; + if(!PluginConfiguration.COLLECT_DATA.get()) return; + try { MetricsLite metrics = new MetricsLite(ImageOnMap.getPlugin()); diff --git a/src/main/java/fr/moribus/imageonmap/PluginConfiguration.java b/src/main/java/fr/moribus/imageonmap/PluginConfiguration.java index c0a69be..9e317a7 100644 --- a/src/main/java/fr/moribus/imageonmap/PluginConfiguration.java +++ b/src/main/java/fr/moribus/imageonmap/PluginConfiguration.java @@ -18,108 +18,16 @@ package fr.moribus.imageonmap; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.plugin.Plugin; +import fr.zcraft.zlib.components.configuration.Configuration; +import fr.zcraft.zlib.components.configuration.ConfigurationItem; -public enum PluginConfiguration +import static fr.zcraft.zlib.components.configuration.ConfigurationItem.item; + + +public final class PluginConfiguration extends Configuration { - //Configuration field Names, with default values - COLLECT_DATA("collect-data", true), - MAP_GLOBAL_LIMIT("map-global-limit", 0, "Limit-map-by-server"), - MAP_PLAYER_LIMIT("map-player-limit", 0, "Limit-map-by-player"); - - private final String fieldName; - private final Object defaultValue; - private final String[] deprecatedNames; - - private PluginConfiguration(String fieldName, Object defaultValue, String ... deprecatedNames) - { - this.fieldName = fieldName; - this.defaultValue = defaultValue; - this.deprecatedNames = deprecatedNames; - } - - public Object get() - { - return getConfig().get(fieldName, defaultValue); - } - - public Object getDefaultValue() - { - return defaultValue; - } - - public boolean isDefined() - { - return getConfig().contains(fieldName); - } - - @Override - public String toString() - { - return get().toString(); - } - - public String getString() - { - return getConfig().getString(fieldName, (String)defaultValue); - } - - public int getInteger() - { - return getConfig().getInt(fieldName, (Integer)defaultValue); - } - - public boolean getBoolean() - { - return getConfig().getBoolean(fieldName, (Boolean)defaultValue); - } - - private boolean init() - { - boolean affected = false; - - if(!isDefined()) - { - getConfig().set(fieldName, defaultValue); - affected = true; - } - - for(String deprecatedName : deprecatedNames) - { - if(getConfig().contains(deprecatedName)) - { - getConfig().set(fieldName, getConfig().get(deprecatedName)); - getConfig().set(deprecatedName, null); - affected = true; - } - } - return affected; - } - - /* ===== Static API ===== */ - - static private Plugin plugin; - static public FileConfiguration getConfig() - { - return plugin.getConfig(); - } - - static public void init(Plugin plugin) - { - PluginConfiguration.plugin = plugin; - loadDefaultValues(); - } - - static private void loadDefaultValues() - { - boolean affected = false; - - for(PluginConfiguration configField : PluginConfiguration.values()) - { - if(configField.init()) affected = true; - } - - if(affected) plugin.saveConfig(); - } + static public ConfigurationItem COLLECT_DATA = item("collect-data", true); + + static public ConfigurationItem MAP_GLOBAL_LIMIT = item("map-global-limit", 0, "Limit-map-by-server"); + static public ConfigurationItem MAP_PLAYER_LIMIT = item("map-player-limit", 0, "Limit-map-by-player"); } diff --git a/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java b/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java index b4476a3..f39791d 100644 --- a/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java +++ b/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java @@ -38,7 +38,6 @@ import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.NumberFormat; import java.util.Arrays; -import java.util.List; import java.util.Locale; @@ -121,8 +120,8 @@ public class MapListGui extends ExplorerGui int imagesCount = MapManager.getMapList(getPlayer().getUniqueId()).size(); int mapPartCount = MapManager.getMapPartCount(getPlayer().getUniqueId()); - int mapGlobalLimit = PluginConfiguration.MAP_GLOBAL_LIMIT.getInteger(); - int mapPersonalLimit = PluginConfiguration.MAP_PLAYER_LIMIT.getInteger(); + int mapGlobalLimit = PluginConfiguration.MAP_GLOBAL_LIMIT.get(); + int mapPersonalLimit = PluginConfiguration.MAP_PLAYER_LIMIT.get(); int mapPartGloballyLeft = mapGlobalLimit - MapManager.getMapCount(); int mapPartPersonallyLeft = mapPersonalLimit - mapPartCount; diff --git a/src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java b/src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java index b51e812..f689f2d 100644 --- a/src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java +++ b/src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java @@ -113,7 +113,7 @@ public class ImageRendererExecutor extends Worker return MapManager.createMap(playerUUID, mapID); } - + static private ImageMap RenderPoster(final BufferedImage image, final UUID playerUUID) throws Throwable { final PosterImage poster = new PosterImage(image); diff --git a/src/main/java/fr/moribus/imageonmap/map/MapManager.java b/src/main/java/fr/moribus/imageonmap/map/MapManager.java index 328c95f..eb59656 100644 --- a/src/main/java/fr/moribus/imageonmap/map/MapManager.java +++ b/src/main/java/fr/moribus/imageonmap/map/MapManager.java @@ -24,16 +24,17 @@ import fr.moribus.imageonmap.image.ImageIOExecutor; import fr.moribus.imageonmap.image.PosterImage; import fr.moribus.imageonmap.map.MapManagerException.Reason; import fr.zcraft.zlib.tools.PluginLogger; -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitTask; +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + abstract public class MapManager { static private final long SAVE_DELAY = 200; @@ -280,12 +281,11 @@ abstract public class MapManager static public void checkMapLimit(int newMapsCount, UUID userUUID) throws MapManagerException { - int limit = PluginConfiguration.MAP_GLOBAL_LIMIT.getInteger(); - if(limit > 0) - { - if(getMapCount() + newMapsCount > limit) - throw new MapManagerException(Reason.MAXIMUM_SERVER_MAPS_EXCEEDED); - } + int limit = PluginConfiguration.MAP_GLOBAL_LIMIT.get(); + + if (limit > 0 && getMapCount() + newMapsCount > limit) + throw new MapManagerException(Reason.MAXIMUM_SERVER_MAPS_EXCEEDED); + getPlayerMapStore(userUUID).checkMapLimit(newMapsCount); } diff --git a/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java b/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java index 2648398..54e1f6b 100644 --- a/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java +++ b/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java @@ -22,6 +22,7 @@ import fr.moribus.imageonmap.ImageOnMap; import fr.moribus.imageonmap.PluginConfiguration; import fr.moribus.imageonmap.map.MapManagerException.Reason; import fr.zcraft.zlib.tools.PluginLogger; +import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; @@ -36,7 +37,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; -import org.bukkit.Material; public class PlayerMapStore implements ConfigurationSerializable { @@ -154,7 +154,7 @@ public class PlayerMapStore implements ConfigurationSerializable public void checkMapLimit(int newMapsCount) throws MapManagerException { - int limit = PluginConfiguration.MAP_PLAYER_LIMIT.getInteger(); + int limit = PluginConfiguration.MAP_PLAYER_LIMIT.get(); if(limit <= 0) return; if(getMapCount() + newMapsCount > limit) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e69de29..0aa0f21 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -0,0 +1,13 @@ +### ImageOnMap configuration file + + +# Allows collection of anonymous statistics on plugin environment and usage +# The statistics are publicly visible here: http://mcstats.org/plugin/ImageOnMap +collect-data: true + + +# Images rendered on maps consume Minecraft maps ID, and there are only 32 767 of them. +# You can limit the maximum number of maps a player, or the whole server, can use with ImageOnMap. +# 0 means unlimited. +map-global-limit: 0 +map-player-limit: 0