diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java index 1e6f356..2bd9158 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java +++ b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java @@ -13,7 +13,7 @@ import ru.simsonic.rscPermissions.DataTypes.RowLadder; import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.InternalCache.LocalCacheData; import ru.simsonic.rscPermissions.MainPluginClass; -import ru.simsonic.rscPermissions.Settings; +import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration; public class BackendMySQL extends ConnectionMySQL implements Backend { @@ -202,7 +202,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend row.climber = null; row.climberType = EntityType.byValue(rs.getInt("climber_type")); row.ladder = rs.getString("ladder"); - String[] breaked = row.ladder.split(Settings.separatorRegExp); + String[] breaked = row.ladder.split(BukkitPluginConfiguration.separatorRegExp); if(breaked.length == 2) { row.ladder = breaked[0]; @@ -249,7 +249,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend public synchronized void dropUserFromLadder(String user, String ladder) { String instance = ""; - String[] breaked = ladder.split(Settings.separatorRegExp); + String[] breaked = ladder.split(BukkitPluginConfiguration.separatorRegExp); if(breaked.length == 2) { ladder = breaked[0]; diff --git a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java index 5fe72ee..35c91e2 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java +++ b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java @@ -25,4 +25,4 @@ public class BridgeForBukkitAPI { return this.vaultChat; } -} \ No newline at end of file +} diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java new file mode 100644 index 0000000..a2c1402 --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java @@ -0,0 +1,175 @@ +package ru.simsonic.rscPermissions.Bukkit; +import ru.simsonic.rscPermissions.Settings; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import org.bukkit.configuration.file.FileConfiguration; +import ru.simsonic.rscPermissions.ConnectionHelper; +import ru.simsonic.rscPermissions.MainPluginClass; + +public class BukkitPluginConfiguration implements Settings +{ + private final MainPluginClass plugin; + private String strDefaultGroup = "Default"; + private String strMaintenanceMode = ""; + private boolean bAlwaysInheritDefault = false; + private boolean bTreatAsteriskAsOP = true; + private boolean bUseMetrics = true; + private boolean bUseWorldGuard = true; + private boolean bUseResidence = true; + private int nAutoReloadDelayTicks = 20 * 900; + private int nRegionFinderGranularity = 1000; + public final int CurrentVersion = 3; + public static final String instantiator = "?"; + public static final String separator = "."; + public static final String separatorRegExp = "\\."; + public BukkitPluginConfiguration(final MainPluginClass plugin) + { + this.plugin = plugin; + } + @Override + public void onLoad() + { + plugin.saveDefaultConfig(); + final FileConfiguration config = plugin.getConfig(); + switch(plugin.getConfig().getInt("internal.version", CurrentVersion)) + { + case 1: + update_v1_to_v2(config); + MainPluginClass.consoleLog.info("[rscp] Configuration updated from v1 to v2."); + case 2: + update_v2_to_v3(config); + MainPluginClass.consoleLog.info("[rscp] Configuration updated from v2 to v3."); + case CurrentVersion: // Current version + plugin.saveConfig(); + break; + } + } + private void update_v1_to_v2(FileConfiguration config) + { + config.set("settings.enable-bans", null); + config.set("settings.integration.worldguard", true); + config.set("settings.integration.residence", true); + config.set("internal.version", 2); + } + private void update_v2_to_v3(FileConfiguration config) + { + config.set("settings.enable-rewards", null); + config.set("settings.auto-update", null); + config.set("internal.version", 3); + } + @Override + public void readSettings() + { + plugin.reloadConfig(); + final FileConfiguration config = plugin.getConfig(); + strDefaultGroup = config.getString("settings.default-group", "Default"); + strMaintenanceMode = config.getString("settings.maintenance-mode", ""); + bAlwaysInheritDefault = config.getBoolean("always-inherit-default-group", false); + bTreatAsteriskAsOP = config.getBoolean("settings.treat-asterisk-as-op", true); + bUseMetrics = config.getBoolean("settings.use-metrics", true); + bUseWorldGuard = config.getBoolean("settings.integration.worldguard", true); + bUseResidence = config.getBoolean("settings.integration.residence", true); + nAutoReloadDelayTicks = config.getInt("settings.auto-reload-delay-sec", 900) * 20; + nRegionFinderGranularity = config.getInt("settings.region-finder-thread-granularity-msec", 1000); + } + @Override + public String getDefaultGroup() + { + return strDefaultGroup; + } + @Override + public boolean isInMaintenance() + { + return ! "".equals(strMaintenanceMode); + } + @Override + public String getMaintenanceMode() + { + return strMaintenanceMode; + } + @Override + public void setMaintenanceMode(String mode) + { + strMaintenanceMode = (mode == null) ? "" : mode; + plugin.getConfig().set("settings.maintenance-mode", strMaintenanceMode); + plugin.saveConfig(); + } + @Override + public boolean isDefaultForever() + { + return bAlwaysInheritDefault; + } + @Override + public boolean isAsteriskOP() + { + return bTreatAsteriskAsOP; + } + @Override + public boolean isUseMetrics() + { + return bUseMetrics; + } + @Override + public boolean isUseWorldGuard() + { + return bUseWorldGuard; + } + @Override + public boolean isUseResidence() + { + return bUseResidence; + } + @Override + public int getAutoReloadDelayTicks() + { + return nAutoReloadDelayTicks; + } + @Override + public long getRegionFinderGranularity() + { + return nRegionFinderGranularity; + } + @Override + public ConnectionHelper getConnectionChain() + { + List> configServers = plugin.getConfig().getMapList("servers"); + List> serverlist = new ArrayList<>(); + for(Iterator> it = configServers.iterator(); it.hasNext();) + { + Map server = (Map)it.next(); + HashMap nodeinfo = new HashMap<>(); + String nodename = (String)server.get("nodename"); + String database = (String)server.get("database"); + String username = (String)server.get("username"); + String password = (String)server.get("password"); + String prefixes = (String)server.get("prefixes"); + String workmode = (String)server.get("workmode"); + if(nodename != null && ! "".equals(nodename)) + { + nodeinfo.put("nodename", nodename); + nodeinfo.put("database", (database != null) ? database : "localhost:3306/minecraft"); + nodeinfo.put("username", (username != null) ? username : "user"); + nodeinfo.put("password", (password != null) ? password : "pass"); + nodeinfo.put("prefixes", (prefixes != null) ? prefixes : "rscp_"); + nodeinfo.put("workmode", (workmode != null) ? workmode : "none"); + serverlist.add(nodeinfo); + } + } + Collections.reverse(serverlist); + ConnectionHelper connPrev = null; + for(HashMap server : serverlist) + { + ConnectionHelper conn = new ConnectionHelper(plugin, connPrev); + conn.Initialize( + server.get("nodename"), server.get("database"), + server.get("username"), server.get("password"), + server.get("workmode"), server.get("prefixes")); + connPrev = conn; + } + return connPrev; + } +} diff --git a/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java b/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java index ef3228f..b69f5ee 100644 --- a/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java +++ b/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java @@ -314,4 +314,4 @@ public class CommandHelper final String ladder = args[1]; throw new CommandAnswerException("dummy :p)"); } -} \ No newline at end of file +} diff --git a/src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java b/src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java index 88ffb15..6f27fb8 100644 --- a/src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java +++ b/src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java @@ -125,4 +125,4 @@ public class ConnectionHelper extends BackendMySQL result.start(); return result; } -} \ No newline at end of file +} diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java index 4c61c2b..a5b7988 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java @@ -5,7 +5,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import org.bukkit.Location; import org.bukkit.World; -import ru.simsonic.rscPermissions.Settings; +import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration; import ru.simsonic.utilities.LanguageUtility; public class Destination @@ -47,7 +47,7 @@ public class Destination if(this.world == null || this.world.isEmpty() || "*".equals(this.world)) return true; final String instantiated = (instantiator != null && !instantiator.isEmpty()) - ? this.world.replace(Settings.instantiator, instantiator) + ? this.world.replace(BukkitPluginConfiguration.instantiator, instantiator) : this.world; return wildcardTesting(world.getName(), instantiated); } @@ -56,7 +56,7 @@ public class Destination if(this.region == null || "".equals(this.region) || "*".equals(this.region)) return true; final String instantiated = (instantiator != null && !"".equals(instantiator)) - ? this.region.replace(Settings.instantiator, instantiator) + ? this.region.replace(BukkitPluginConfiguration.instantiator, instantiator) : this.region; for(String regionId : regions) if(wildcardTesting(regionId, instantiated)) diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java index c20a9ac..40f4046 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java @@ -1,7 +1,7 @@ package ru.simsonic.rscPermissions.DataTypes; import java.sql.Timestamp; import java.util.Arrays; -import ru.simsonic.rscPermissions.Settings; +import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration; import ru.simsonic.utilities.LanguageUtility; public class RowInheritance extends AbstractRow implements Comparable @@ -18,10 +18,10 @@ public class RowInheritance extends AbstractRow implements Comparable 1) { - parent = LanguageUtility.glue(Arrays.copyOf(splitted, splitted.length - 1), Settings.separator); + parent = LanguageUtility.glue(Arrays.copyOf(splitted, splitted.length - 1), BukkitPluginConfiguration.separator); instance = splitted[splitted.length - 1]; return; } diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java index 8684d1c..55e3e36 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java @@ -12,7 +12,7 @@ import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowLadder; import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.MainPluginClass; -import ru.simsonic.rscPermissions.Settings; +import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration; public class BrandNewCache implements AbstractPermissionsCache { @@ -199,8 +199,8 @@ public class BrandNewCache implements AbstractPermissionsCache result.prefix = result.prefix.replace("%", result.prefix); if(intermediate.suffix != null && !"".equals(intermediate.suffix)) result.suffix = result.suffix.replace("%", result.suffix); - result.prefix = result.prefix.replace(Settings.instantiator, instantiator); - result.suffix = result.suffix.replace(Settings.instantiator, instantiator); + result.prefix = result.prefix.replace(BukkitPluginConfiguration.instantiator, instantiator); + result.suffix = result.suffix.replace(BukkitPluginConfiguration.instantiator, instantiator); // Permissions permissions.addAll(Arrays.asList(intermediate.permissions)); } @@ -272,4 +272,4 @@ public class BrandNewCache implements AbstractPermissionsCache } return ladders_g.size() + ladders_u.size(); } -} \ No newline at end of file +} diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java index 0d317b6..0c6a5a6 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java @@ -8,7 +8,7 @@ import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowLadder; import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.MainPluginClass; -import ru.simsonic.rscPermissions.Settings; +import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration; public class LocalCacheFunctions extends LocalCacheTree { @@ -76,7 +76,7 @@ public class LocalCacheFunctions extends LocalCacheTree return null; final ArrayList result = new ArrayList<>(); for(ResolutionLeaf leaf : tree) - result.add(leaf.instance != null ? leaf.group + Settings.separator + leaf.instance : leaf.group); + result.add(leaf.instance != null ? leaf.group + BukkitPluginConfiguration.separator + leaf.instance : leaf.group); return result; } public synchronized Set getAllPossibleGroups() diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java index aad2774..ebe162c 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java @@ -11,7 +11,7 @@ import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowLadder; import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.MainPluginClass; -import ru.simsonic.rscPermissions.Settings; +import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration; import ru.simsonic.utilities.LanguageUtility; public class LocalCacheTree extends LocalCacheData @@ -99,8 +99,8 @@ public class LocalCacheTree extends LocalCacheData { String permission = row.permission; // Additional processing - if(permission.contains(Settings.instantiator) && (leaf.instance != null)) - permission = permission.replace(Settings.instantiator, leaf.instance); + if(permission.contains(BukkitPluginConfiguration.instantiator) && (leaf.instance != null)) + permission = permission.replace(BukkitPluginConfiguration.instantiator, leaf.instance); permissions.put(permission, row.value); } RowEntity entity = entities_g.get(leaf.group.toLowerCase()); @@ -110,8 +110,8 @@ public class LocalCacheTree extends LocalCacheData prefix = entity.prefix.replace("%", prefix); if(entity.suffix != null && !"".equals(entity.suffix)) suffix = entity.suffix.replace("%", suffix); - prefix = prefix.replace(Settings.instantiator, leaf.instance); - suffix = suffix.replace(Settings.instantiator, leaf.instance); + prefix = prefix.replace(BukkitPluginConfiguration.instantiator, leaf.instance); + suffix = suffix.replace(BukkitPluginConfiguration.instantiator, leaf.instance); } } // User permissions diff --git a/src/main/java/ru/simsonic/rscPermissions/Ladders.java b/src/main/java/ru/simsonic/rscPermissions/Ladders.java index d98c84e..ef89396 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Ladders.java +++ b/src/main/java/ru/simsonic/rscPermissions/Ladders.java @@ -1,4 +1,5 @@ package ru.simsonic.rscPermissions; +import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration; import java.util.ArrayList; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -28,7 +29,7 @@ public class Ladders return new String[] { "Player must be online." }; String template = ladder; String instance = ""; - String[] breaked = ladder.split(Settings.separatorRegExp); + String[] breaked = ladder.split(BukkitPluginConfiguration.separatorRegExp); if(breaked.length == 2) { template = breaked[0].toLowerCase(); @@ -77,7 +78,7 @@ public class Ladders if(position.prevNode != null) position = position.prevNode; if(position.instance != null) - if(Settings.instantiator.equals(position.instance)) + if(BukkitPluginConfiguration.instantiator.equals(position.instance)) { if("".equals(instance)) return new String[] { "Operation requires ladder instance (