diff --git a/nb-configuration.xml b/nb-configuration.xml index b9cdb90..7d2a96a 100644 --- a/nb-configuration.xml +++ b/nb-configuration.xml @@ -13,6 +13,6 @@ You can copy and paste the single properties, into the pom.xml file and the IDE That way multiple projects can share the same settings (useful for formatting rules for example). Any value defined here will override the pom.xml file value but is only applicable to the current project. --> - ______JDK_1.7_Update_51 + ______JDK_1.7_Update_67 diff --git a/pom.xml b/pom.xml index 67284fe..64a6f3a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ ru.simsonic rscPermissions - 0.8.10b + 0.9.0b jar rscPermissions @@ -32,7 +32,7 @@ org.apache.maven.plugins maven-jar-plugin - 2.4 + 2.5 false @@ -45,7 +45,7 @@ org.apache.maven.plugins maven-shade-plugin - 2.2 + 2.3 package @@ -108,47 +108,72 @@ bukkit-repo http://repo.bukkit.org/content/groups/public + + + VaultAPI + http://nexus.theyeticave.net/content/repositories/pub_releases + sk89q-repo http://maven.sk89q.com/repo/ + + maven.sk89q.com + http://maven.sk89q.com/artifactory/libs-release-local + + + maven.sk89q.com-snapshot + http://maven.sk89q.com/artifactory/libs-snapshot-local + Residence http://ci.drtshock.net/plugin/repository/everything/ - voxile.ru - http://ci.voxile.ru/plugin/repository/everything/ + http://s9.voxile.ru/plugin/repository/everything/ mysql mysql-connector-java - 5.1.30 + 5.1.32 runtime org.bukkit bukkit - 1.7.5-R0.1-SNAPSHOT + 1.7.9-R0.1-SNAPSHOT provided jar + + ru.simsonic + rscAPI + 1.2.1 + compile + jar + + + net.milkbowl.vault + VaultAPI + 1.4 + provided + com.sk89q worldedit - 5.6 + 5.6.2 compile jar com.sk89q worldguard - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT provided jar @@ -159,12 +184,5 @@ provided jar - - ru.simsonic - rscAPI - 1.2.0 - compile - jar - \ No newline at end of file diff --git a/rscp.png b/rscp.png new file mode 100644 index 0000000..696f0df Binary files /dev/null and b/rscp.png differ diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java b/src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java index fb77218..00a06c2 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java +++ b/src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java @@ -3,8 +3,7 @@ import ru.simsonic.rscPermissions.DataTypes.RowEntity; import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowLadder; import ru.simsonic.rscPermissions.DataTypes.RowPermission; -import ru.simsonic.rscPermissions.DataTypes.RowServer; -import ru.simsonic.rscPermissions.LocalCacheData; +import ru.simsonic.rscPermissions.InternalCache.LocalCacheData; public interface Backend { @@ -16,7 +15,6 @@ public interface Backend public abstract RowPermission[] fetchPermissions(); public abstract RowInheritance[] fetchInheritance(); public abstract RowLadder[] fetchLadders(); - public abstract RowServer[] fetchServers(); public abstract void insertExampleRows(); public abstract void updateEntityText(String entity, boolean entity_type, String text, boolean isPrefix); diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java index 79137d8..d6db475 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java +++ b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java @@ -3,18 +3,16 @@ import ru.simsonic.utilities.*; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Arrays; import java.util.logging.Level; import ru.simsonic.rscPermissions.DataTypes.Destination; import ru.simsonic.rscPermissions.DataTypes.RowEntity; -import ru.simsonic.rscPermissions.DataTypes.RowEntity.EntityType; +import ru.simsonic.rscPermissions.DataTypes.EntityType; import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowLadder; import ru.simsonic.rscPermissions.DataTypes.RowPermission; -import ru.simsonic.rscPermissions.DataTypes.RowReward; -import ru.simsonic.rscPermissions.DataTypes.RowServer; -import ru.simsonic.rscPermissions.LocalCacheData; +import ru.simsonic.rscPermissions.InternalCache.LocalCacheData; import ru.simsonic.rscPermissions.MainPluginClass; -import ru.simsonic.rscPermissions.Rewards; import ru.simsonic.rscPermissions.Settings; public class BackendMySQL extends ConnectionMySQL implements Backend @@ -60,9 +58,8 @@ public class BackendMySQL extends ConnectionMySQL implements Backend return false; if(super.Connect()) { - createTablesIfNotExist(); + executeUpdate(loadResourceSQLT("Initialize_main_v1")); cleanupTables(); - updateServerInfo(); return true; } return false; @@ -81,42 +78,22 @@ public class BackendMySQL extends ConnectionMySQL implements Backend return false; return super.executeUpdate(query); } - private void createTablesIfNotExist() - { - executeUpdate(loadResourceSQLT("Initialize_main_v1")); - if(plugin.settings.isRewardsEnabled()) - executeUpdate(loadResourceSQLT("Initialize_rewards_v1")); - } private void cleanupTables() { executeUpdate(loadResourceSQLT("Cleanup_tables")); } - private void updateServerInfo() - { - final String mMode = plugin.settings.getMaintenanceMode(); - setupQueryTemplate("{SERVERID}", plugin.getServer().getServerId()); - setupQueryTemplate("{PLUGIN_VER}", plugin.getDescription().getVersion()); - setupQueryTemplate("{DEFAULT}", plugin.settings.getDefaultGroup()); - setupQueryTemplate("{OP}", plugin.settings.isAsteriskOP() ? "1" : "0"); - setupQueryTemplate("{DELAY}", Integer.toString(plugin.settings.getAutoReloadDelayTicks() / 20)); - setupQueryTemplate("{mMode}", "".equals(mMode) ? "NULL" : "\"" + mMode + "\""); - setupQueryTemplate("{USE_R}", plugin.settings.isRewardsEnabled() ? "1" : "0"); - setupQueryTemplate("{CFG_VER}", Integer.toString(plugin.settings.CurrentVersion)); - executeUpdate(loadResourceSQLT("Update_server_info")); - } @Override public synchronized void fetchIntoCache(LocalCacheData cache) { cleanupTables(); MainPluginClass.consoleLog.log(Level.INFO, - "[rscp] Fetched {0}e, {1}p, {2}i, {3}l, {4}s from \"{5}\".", + "[rscp] Fetched {0}e, {1}p, {2}i, {3}l, from \"{4}\".", new Object[] { Integer.toString(cache.ImportEntities(fetchEntities())), Integer.toString(cache.ImportPermissions(fetchPermissions())), Integer.toString(cache.ImportInheritance(fetchInheritance())), Integer.toString(cache.ImportLadders(fetchLadders())), - Integer.toString(cache.ImportServers(fetchServers())), RememberName, }); } @@ -132,7 +109,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend RowEntity row = new RowEntity(); row.id = rs.getInt("id"); row.entity = rs.getString("entity"); - row.entity_type = EntityType.byValue(rs.getInt("entity_type")); + row.entityType = EntityType.byValue(rs.getInt("entity_type")); row.prefix = rs.getString("prefix"); row.suffix = rs.getString("suffix"); result.add(row); @@ -160,7 +137,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend RowPermission row = new RowPermission(); row.id = rs.getInt("id"); row.entity = rs.getString("entity"); - row.entity_type = EntityType.byValue(rs.getInt("entity_type")); + row.entityType = EntityType.byValue(rs.getInt("entity_type")); row.permission = rs.getString("permission"); row.value = rs.getBoolean("value"); row.destination = destination; @@ -193,13 +170,8 @@ public class BackendMySQL extends ConnectionMySQL implements Backend row.id = rs.getInt("id"); row.entity = rs.getString("entity"); row.parent = rs.getString("parent"); - String[] breaked = row.parent.split(Settings.separatorRegExp); - if(breaked.length == 2) - { - row.parent = breaked[0]; - row.instance = breaked[1]; - } - row.child_type = EntityType.byValue(rs.getInt("inheritance_type")); + row.deriveInstance(); + row.childType = EntityType.byValue(rs.getInt("inheritance_type")); row.priority = rs.getInt("inheritance_priority"); row.destination = destination; row.expirience = rs.getInt("expirience"); @@ -227,7 +199,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend row.climber = rs.getString("climber"); if("".equals(row.climber)) row.climber = null; - row.climber_type = EntityType.byValue(rs.getInt("climber_type")); + row.climberType = EntityType.byValue(rs.getInt("climber_type")); row.ladder = rs.getString("ladder"); String[] breaked = row.ladder.split(Settings.separatorRegExp); if(breaked.length == 2) @@ -245,58 +217,6 @@ public class BackendMySQL extends ConnectionMySQL implements Backend return result.toArray(new RowLadder[result.size()]); } @Override - public synchronized RowServer[] fetchServers() - { - final ArrayList result = new ArrayList<>(); - final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}servers`;"); - try - { - while(rs.next()) - { - RowServer row = new RowServer(); - row.serverId = rs.getString("serverId"); - // PARSE OTHER COLUMNS HERE - result.add(row); - } - rs.close(); - } catch(SQLException ex) { - MainPluginClass.consoleLog.log(Level.WARNING, "[rscp] Exception in rs2s(): {0}", ex.getLocalizedMessage()); - } - return result.toArray(new RowServer[result.size()]); - } - public synchronized void fetchRewards(Rewards rewardHelper) - { - final ArrayList result = new ArrayList<>(); - final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}rewards`;"); - try - { - while(rs.next()) - { - RowReward row = new RowReward(); - row.id = rs.getInt("id"); - row.user = rs.getString("user").toLowerCase(); - row.code = rs.getString("code"); - row.activated = rs.getBoolean("activated"); - if(row.activated) - continue; - row.activated_timestamp = rs.getTimestamp("activated_timestamp"); - row.execute_commands = rs.getString("execute_commands"); - row.command_permissions = rs.getString("command_permissions"); - row.add_group = rs.getString("add_group"); - row.add_group_destination = rs.getString("add_group_destination"); - row.add_group_expirience = rs.getInt("add_group_expirience"); - row.add_group_interval = rs.getString("add_group_interval"); - result.add(row); - } - rs.close(); - } catch(SQLException ex) { - MainPluginClass.consoleLog.log(Level.WARNING, "[rscp] Exception in rs2r(): {0}", ex.getLocalizedMessage()); - } - MainPluginClass.consoleLog.log(Level.INFO, "[rscp] Fetched {0} unused reward codes.", - Integer.toString(result.size())); - rewardHelper.ImportRewards(result.toArray(new RowReward[result.size()])); - } - @Override public synchronized void insertExampleRows() { executeUpdate(loadResourceSQLT("Insert_example_rows_v1")); diff --git a/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java b/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java index d117b4a..9c81ac0 100644 --- a/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java +++ b/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java @@ -1,4 +1,5 @@ package ru.simsonic.rscPermissions; +import ru.simsonic.utilities.CommandAnswerException; import java.util.ArrayList; import java.util.Collections; import java.util.Map; @@ -11,15 +12,13 @@ import ru.simsonic.rscPermissions.Importers.PermissionsEx_YAML; public class CommandHelper { private final MainPluginClass plugin; - public final Rewards rewardHelper; public final Ladders ladderHelper; public CommandHelper(final MainPluginClass rscp) { this.plugin = rscp; - rewardHelper = new Rewards(rscp); ladderHelper = new Ladders(rscp); } - public void onCommand(CommandSender sender, Command cmd, String label, String[] args) throws CommandHelperAnswerException + public void onCommand(CommandSender sender, Command cmd, String label, String[] args) throws CommandAnswerException { switch(cmd.getName().toLowerCase()) { @@ -32,25 +31,17 @@ public class CommandHelper ladderHelper.executePromotion(sender, args[0], (args.length >= 2) ? args[1] : null, true); return; } - throw new CommandHelperAnswerException("/promote "); + throw new CommandAnswerException("/promote "); case "demote": if(args.length >= 1) { ladderHelper.executePromotion(sender, args[0], (args.length >= 2) ? args[1] : null, false); return; } - throw new CommandHelperAnswerException("/demote "); - case "reward": - if(sender instanceof Player) - { - String reward = (args.length >= 1) ? args[0] : null; - rewardHelper.executeReward((Player)sender, reward); - return; - } - throw new CommandHelperAnswerException("This command cannot be run from console."); + throw new CommandAnswerException("/demote "); } } - private void onCommandHub(CommandSender sender, String[] args) throws CommandHelperAnswerException + private void onCommandHub(CommandSender sender, String[] args) throws CommandAnswerException { final ArrayList help = new ArrayList<>(); if(sender.hasPermission("rscp.admin")) @@ -74,7 +65,7 @@ public class CommandHelper help.add(2, "{_DS}Current serverId is \'{_LS}" + plugin.getServer().getServerId() + "{_DS}\' (server.properties)"); help.add("{_LG}" + plugin.getDescription().getWebsite()); if(args.length == 0) - throw new CommandHelperAnswerException(help); + throw new CommandAnswerException(help); switch(args[0].toLowerCase()) { case "user": @@ -89,13 +80,13 @@ public class CommandHelper case "promote": /* rscp promote */ if(args.length < 3) - throw new CommandHelperAnswerException("/rscp promote "); + throw new CommandAnswerException("/rscp promote "); ladderHelper.executePromotion(sender, args[1], args[2], true); return; case "demote": /* rscp demote */ if(args.length < 3) - throw new CommandHelperAnswerException("/rscp demote "); + throw new CommandAnswerException("/rscp demote "); ladderHelper.executePromotion(sender, args[1], args[2], false); return; case "lock": @@ -107,7 +98,7 @@ public class CommandHelper mmon = plugin.getConfig().getString("language.mModes.locked.default.mmon", mmon); mmon = plugin.getConfig().getString("language.mModes.locked." + mMode + ".mmon", mmon); plugin.maintenance.setMaintenanceMode(mMode); - throw new CommandHelperAnswerException(mmon); + throw new CommandAnswerException(mmon); } return; case "unlock": @@ -117,7 +108,7 @@ public class CommandHelper String mmoff = "Maintenance mode disabled"; mmoff = plugin.getConfig().getString("language.mModes.unlocked", mmoff); plugin.maintenance.setMaintenanceMode(null); - throw new CommandHelperAnswerException(mmoff); + throw new CommandAnswerException(mmoff); } break; case "examplerows": @@ -125,7 +116,7 @@ public class CommandHelper if(sender.hasPermission("rscp.admin")) { plugin.connectionList.threadInsertExampleRows(sender); - throw new CommandHelperAnswerException("Example rows have been added into database."); + throw new CommandAnswerException("Example rows have been added into database."); } return; case "import": @@ -141,7 +132,7 @@ public class CommandHelper // TO DO HERE PermissionsEx_YAML importer_pex = new PermissionsEx_YAML(plugin, args[2]); plugin.connectionList.threadFetchTablesData(); - throw new CommandHelperAnswerException(new String[] + throw new CommandAnswerException(new String[] { "Data has been imported successfully!", "Entities: {MAGENTA}" + Integer.toString(importer_pex.getEntities().length), @@ -152,9 +143,9 @@ public class CommandHelper }); case "pex-sql": plugin.connectionList.threadMigrateFromPExSQL(sender); - throw new CommandHelperAnswerException("Trying to import PEX database into rscPermissions..."); + throw new CommandAnswerException("Trying to import PEX database into rscPermissions..."); } - throw new CommandHelperAnswerException(new String[] + throw new CommandAnswerException(new String[] { "Usage: {GOLD}/rscp import [options]", "Available importers:", @@ -168,7 +159,7 @@ public class CommandHelper if(sender.hasPermission("rscp.admin.reload")) { plugin.connectionList.threadFetchTablesData(); - throw new CommandHelperAnswerException("Tables have been fetched."); + throw new CommandAnswerException("Tables have been fetched."); } return; case "reload": @@ -177,28 +168,28 @@ public class CommandHelper { plugin.getServer().getPluginManager().disablePlugin(plugin); plugin.getServer().getPluginManager().enablePlugin(plugin); - throw new CommandHelperAnswerException("Plugin has been reloaded."); + throw new CommandAnswerException("Plugin has been reloaded."); } return; case "update": /* rscp update */ if(sender.hasPermission("rscp.admin")) - throw new CommandHelperAnswerException(plugin.doUpdate(sender)); + throw new CommandAnswerException(plugin.doUpdate(sender)); return; case "debug": /* rscp debug [yes|on|no|off|toggle] */ if(sender.hasPermission("rscp.admin")) - throw new CommandHelperAnswerException("Not implemented yet."); + throw new CommandAnswerException("Not implemented yet."); return; case "help": default: - throw new CommandHelperAnswerException(help); + throw new CommandAnswerException(help); } } - private void onCommandHubUser(CommandSender sender, String[] args) throws CommandHelperAnswerException + private void onCommandHubUser(CommandSender sender, String[] args) throws CommandAnswerException { if(sender.hasPermission("rscp.admin") == false) - throw new CommandHelperAnswerException("Not enough permissions."); + throw new CommandAnswerException("Not enough permissions."); final String[] help = new String[] { "rscPermissions command hub (user section).", @@ -210,16 +201,16 @@ public class CommandHelper "/rscp user suffix [suffix]", }; if(args.length < 3) - throw new CommandHelperAnswerException(help); + throw new CommandAnswerException(help); final Player player = plugin.getServer().getPlayerExact(args[1]); if(player == null) - throw new CommandHelperAnswerException("Player should be online"); + throw new CommandAnswerException("Player should be online"); final ArrayList list = new ArrayList<>(); switch(args[2].toLowerCase()) { case "list": if(args.length < 4) - throw new CommandHelperAnswerException(help); + throw new CommandAnswerException(help); switch(args[3].toLowerCase()) { case "permissions": @@ -235,20 +226,20 @@ public class CommandHelper for(String perm : sorted_keys) if(pv.containsKey(perm)) list.add((pv.get(perm) ? "{_LG}" : "{_LR}") + perm); - throw new CommandHelperAnswerException(list); + throw new CommandAnswerException(list); case "groups": list.add("{MAGENTA}Group list for {_YL}" + player.getName() + "{MAGENTA}:"); ArrayList groups = plugin.cache.getUserGroups(player.getName()); for(String group : groups) list.add("{_LG}" + group); - throw new CommandHelperAnswerException(list); + throw new CommandAnswerException(list); /* case "ranks": list.add("{MAGENTA}Ranks of player {_YL}" + player.getName() + "{MAGENTA}:"); - throw new CommandHelperAnswerException(list); + throw new CommandAnswerException(list); */ } - throw new CommandHelperAnswerException(list); + throw new CommandAnswerException(list); case "prefix": if(args.length > 3) { @@ -258,7 +249,7 @@ public class CommandHelper } else list.add("{MAGENTA}Prefix for user {_YL}" + player.getName() + " {MAGENTA}is \"{_R}" + plugin.cache.userGetPrefix(player.getName()) + "{MAGENTA}\"."); - throw new CommandHelperAnswerException(list); + throw new CommandAnswerException(list); case "suffix": if(args.length > 3) { @@ -268,13 +259,13 @@ public class CommandHelper } else list.add("{MAGENTA}Suffix for user {_YL}" + player.getName() + " {MAGENTA}is \"{_R}" + plugin.cache.userGetSuffix(player.getName()) + "{MAGENTA}\"."); - throw new CommandHelperAnswerException(list); + throw new CommandAnswerException(list); } } - private void onCommandHubGroup(CommandSender sender, String[] args) throws CommandHelperAnswerException + private void onCommandHubGroup(CommandSender sender, String[] args) throws CommandAnswerException { if(sender.hasPermission("rscp.admin") == false) - throw new CommandHelperAnswerException("Not enough permissions."); + throw new CommandAnswerException("Not enough permissions."); final String[] help = new String[] { "rscPermissions command hub (group section).", @@ -285,7 +276,7 @@ public class CommandHelper "/rscp group suffix [suffix]", }; if(args.length < 3) - throw new CommandHelperAnswerException(help); + throw new CommandAnswerException(help); final String group = args[1]; final ArrayList list = new ArrayList<>(); switch(args[2].toLowerCase()) @@ -299,7 +290,7 @@ public class CommandHelper } else list.add("{MAGENTA}Prefix for group {_YL}" + group + " {MAGENTA}is \"{_R}" + plugin.cache.groupGetPrefix(group) + "{MAGENTA}\"."); - throw new CommandHelperAnswerException(list); + throw new CommandAnswerException(list); case "suffix": if(args.length > 3) { @@ -309,13 +300,13 @@ public class CommandHelper } else list.add("{MAGENTA}Suffix for group {_YL}" + group + " {MAGENTA}is \"{_R}" + plugin.cache.groupGetSuffix(group) + "{MAGENTA}\"."); - throw new CommandHelperAnswerException(list); + throw new CommandAnswerException(list); } } - private void onCommandHubLadder(CommandSender sender, String[] args) throws CommandHelperAnswerException + private void onCommandHubLadder(CommandSender sender, String[] args) throws CommandAnswerException { if(sender.hasPermission("rscp.admin") == false) - throw new CommandHelperAnswerException("Not enough permissions."); + throw new CommandAnswerException("Not enough permissions."); final String[] help = new String[] { "rscPermissions command hub (ladder section).", @@ -324,8 +315,8 @@ public class CommandHelper // "/rscp ladder list users", }; if(args.length < 3) - throw new CommandHelperAnswerException(help); + throw new CommandAnswerException(help); final String ladder = args[1]; - throw new CommandHelperAnswerException("dummy :p)"); + 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 8480796..88ffb15 100644 --- a/src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java +++ b/src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java @@ -42,8 +42,6 @@ public class ConnectionHelper extends BackendMySQL if(connection == null) return; fetchIntoCache(plugin.cache); - if(plugin.settings.isRewardsEnabled()) - fetchRewards(plugin.commandExecutor.rewardHelper); // Update permissions for online players try { @@ -115,8 +113,8 @@ public class ConnectionHelper extends BackendMySQL @Override public void run() { - plugin.Message(sender, "Migration from PermissionsEx (MySQL backend) done!"); - plugin.Message(sender, "Check the latest database row for new data."); + plugin.formattedMessage(sender, "Migration from PermissionsEx (MySQL backend) done!"); + plugin.formattedMessage(sender, "Check the latest database row for new data."); } }); } catch(InterruptedException ex) { diff --git a/src/main/java/ru/simsonic/rscPermissions/CommandHelperAnswerException.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/CommandHelperAnswerException.java similarity index 91% rename from src/main/java/ru/simsonic/rscPermissions/CommandHelperAnswerException.java rename to src/main/java/ru/simsonic/rscPermissions/DataTypes/CommandHelperAnswerException.java index 4ec68bf..697ffea 100644 --- a/src/main/java/ru/simsonic/rscPermissions/CommandHelperAnswerException.java +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/CommandHelperAnswerException.java @@ -1,4 +1,4 @@ -package ru.simsonic.rscPermissions; +package ru.simsonic.rscPermissions.DataTypes; import java.util.List; public class CommandHelperAnswerException extends Exception diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java new file mode 100644 index 0000000..a888642 --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java @@ -0,0 +1,18 @@ +package ru.simsonic.rscPermissions.DataTypes; + +public enum EntityType +{ + group(0), player(1), unknown(-1); + private final int value; + private EntityType(int value) + { + this.value = value; + } + public static EntityType byValue(int value) + { + for(EntityType constant : EntityType.values()) + if(constant.value == value) + return constant; + return unknown; + } +} \ No newline at end of file diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java index 3f1c1b4..8a1eec2 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java @@ -2,27 +2,8 @@ package ru.simsonic.rscPermissions.DataTypes; public class RowEntity extends AbstractRow { - public enum EntityType - { - groupName(0), - playerName(1), - playerUniqueId(2), - unknown(-1); - public static EntityType byValue(int value) - { - for(EntityType constant : EntityType.values()) - if(constant.value == value) - return constant; - return unknown; - } - private final int value; - private EntityType(int value) - { - this.value = value; - } - } public String entity; - public EntityType entity_type; + public EntityType entityType; public String prefix; public String suffix; @Override diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java index fab1f37..c20a9ac 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java @@ -1,17 +1,33 @@ package ru.simsonic.rscPermissions.DataTypes; import java.sql.Timestamp; -import ru.simsonic.rscPermissions.DataTypes.RowEntity.EntityType; +import java.util.Arrays; +import ru.simsonic.rscPermissions.Settings; +import ru.simsonic.utilities.LanguageUtility; public class RowInheritance extends AbstractRow implements Comparable { public String entity; public String parent; public String instance; - public EntityType child_type; + public EntityType childType; public int priority; public Destination destination; public int expirience; public Timestamp lifetime; + public void deriveInstance() + { + if(parent != null) + { + final String[] splitted = parent.split(Settings.separatorRegExp); + if(splitted.length > 1) + { + parent = LanguageUtility.glue(Arrays.copyOf(splitted, splitted.length - 1), Settings.separator); + instance = splitted[splitted.length - 1]; + return; + } + } + instance = null; + } @Override public int compareTo(RowInheritance t) { diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowLadder.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowLadder.java index f496673..4adfb07 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowLadder.java +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowLadder.java @@ -1,10 +1,9 @@ package ru.simsonic.rscPermissions.DataTypes; -import ru.simsonic.rscPermissions.DataTypes.RowEntity.EntityType; public class RowLadder extends AbstractRow implements Comparable { public String climber; - public EntityType climber_type; + public EntityType climberType; public String ladder; public String instance; public int rank; diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowPermission.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowPermission.java index 95412a8..7336738 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowPermission.java +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowPermission.java @@ -1,11 +1,10 @@ package ru.simsonic.rscPermissions.DataTypes; import java.sql.Timestamp; -import ru.simsonic.rscPermissions.DataTypes.RowEntity.EntityType; public class RowPermission extends AbstractRow { public String entity; - public EntityType entity_type; + public EntityType entityType; public String permission; public boolean value; public Destination destination; diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowReward.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowReward.java deleted file mode 100644 index d306885..0000000 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowReward.java +++ /dev/null @@ -1,17 +0,0 @@ -package ru.simsonic.rscPermissions.DataTypes; -import java.sql.Timestamp; - -public class RowReward -{ - public int id; - public String user; - public String code; - public boolean activated; - public Timestamp activated_timestamp; - public String execute_commands; - public String command_permissions; - public String add_group; - public String add_group_destination; - public int add_group_expirience; - public String add_group_interval; -} \ No newline at end of file diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowServer.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowServer.java deleted file mode 100644 index 20860dc..0000000 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowServer.java +++ /dev/null @@ -1,6 +0,0 @@ -package ru.simsonic.rscPermissions.DataTypes; - -public class RowServer -{ - public String serverId; -} \ No newline at end of file diff --git a/src/main/java/ru/simsonic/rscPermissions/Frontends/VaultChat.java b/src/main/java/ru/simsonic/rscPermissions/Frontends/VaultChat.java new file mode 100644 index 0000000..0e945f1 --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/Frontends/VaultChat.java @@ -0,0 +1,367 @@ +package ru.simsonic.rscPermissions.Frontends; +import net.milkbowl.vault.permission.Permission; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.entity.Player; +import ru.simsonic.rscPermissions.MainPluginClass; + +public final class VaultChat extends net.milkbowl.vault.chat.Chat +{ + private final MainPluginClass rscp; + public VaultChat(MainPluginClass plugin, Permission perms) + { + super(perms); + this.rscp = plugin; + } + @Override + public String getName() + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean isEnabled() + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public String getPlayerPrefix(String world, String player) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public void setPlayerPrefix(String world, String player, String prefix) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public String getPlayerSuffix(String world, String player) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public void setPlayerSuffix(String world, String player, String suffix) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public String getGroupPrefix(String world, String group) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public void setGroupPrefix(String world, String group, String prefix) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public String getGroupSuffix(String world, String group) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public void setGroupSuffix(String world, String group, String suffix) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public int getPlayerInfoInteger(String world, String player, String node, int defaultValue) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public void setPlayerInfoInteger(String world, String player, String node, int value) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public int getGroupInfoInteger(String world, String group, String node, int defaultValue) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public void setGroupInfoInteger(String world, String group, String node, int value) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public double getPlayerInfoDouble(String world, String player, String node, double defaultValue) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public void setPlayerInfoDouble(String world, String player, String node, double value) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public double getGroupInfoDouble(String world, String group, String node, double defaultValue) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public void setGroupInfoDouble(String world, String group, String node, double value) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean getPlayerInfoBoolean(String world, String player, String node, boolean defaultValue) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public void setPlayerInfoBoolean(String world, String player, String node, boolean value) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean getGroupInfoBoolean(String world, String group, String node, boolean defaultValue) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public void setGroupInfoBoolean(String world, String group, String node, boolean value) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public String getPlayerInfoString(String world, String player, String node, String defaultValue) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public void setPlayerInfoString(String world, String player, String node, String value) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public String getGroupInfoString(String world, String group, String node, String defaultValue) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public void setGroupInfoString(String world, String group, String node, String value) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public String getPlayerPrefix(String world, OfflinePlayer player) + { + return getPlayerPrefix(world, player.getName()); + } + @Override + public String getPlayerPrefix(Player player) + { + return getPlayerPrefix(player.getWorld().getName(), player); + } + @Override + public void setPlayerPrefix(String world, OfflinePlayer player, String prefix) + { + setPlayerPrefix(world, player.getName(), prefix); + } + @Override + public void setPlayerPrefix(Player player, String prefix) + { + setPlayerPrefix(player.getWorld().getName(), player, prefix); + } + @Override + public String getPlayerSuffix(String world, OfflinePlayer player) + { + return getPlayerSuffix(world, player.getName()); + } + @Override + public String getPlayerSuffix(Player player) + { + return getPlayerSuffix(player.getWorld().getName(), player); + } + @Override + public void setPlayerSuffix(String world, OfflinePlayer player, String suffix) + { + setPlayerSuffix(world, player.getName(), suffix); + } + @Override + public void setPlayerSuffix(Player player, String suffix) + { + setPlayerSuffix(player.getWorld().getName(), player, suffix); + } + @Override + public String getGroupPrefix(World world, String group) + { + return getGroupPrefix(world.getName(), group); + } + @Override + public void setGroupPrefix(World world, String group, String prefix) + { + setGroupPrefix(world.getName(), group, prefix); + } + @Override + public String getGroupSuffix(World world, String group) + { + return getGroupSuffix(world.getName(), group); + } + @Override + public void setGroupSuffix(World world, String group, String suffix) + { + setGroupSuffix(world.getName(), group, suffix); + } + @Override + public int getPlayerInfoInteger(String world, OfflinePlayer player, String node, int defaultValue) + { + return getPlayerInfoInteger(world, player.getName(), node, defaultValue); + } + @Override + public int getPlayerInfoInteger(Player player, String node, int defaultValue) + { + return getPlayerInfoInteger(player.getWorld().getName(), player, node, defaultValue); + } + @Override + public void setPlayerInfoInteger(String world, OfflinePlayer player, String node, int value) + { + setPlayerInfoInteger(world, player.getName(), node, value); + } + @Override + public void setPlayerInfoInteger(Player player, String node, int value) + { + setPlayerInfoInteger(player.getWorld().getName(), player, node, value); + } + @Override + public int getGroupInfoInteger(World world, String group, String node, int defaultValue) + { + return getGroupInfoInteger(world.getName(), group, node, defaultValue); + } + @Override + public void setGroupInfoInteger(World world, String group, String node, int value) + { + setGroupInfoInteger(world.getName(), group, node, value); + } + @Override + public double getPlayerInfoDouble(String world, OfflinePlayer player, String node, double defaultValue) + { + return getPlayerInfoDouble(world, player.getName(), node, defaultValue); + } + @Override + public double getPlayerInfoDouble(Player player, String node, double defaultValue) + { + return getPlayerInfoDouble(player.getWorld().getName(), player, node, defaultValue); + } + @Override + public void setPlayerInfoDouble(String world, OfflinePlayer player, String node, double value) + { + setPlayerInfoDouble(world, player.getName(), node, value); + } + @Override + public void setPlayerInfoDouble(Player player, String node, double value) + { + setPlayerInfoDouble(player.getWorld().getName(), player, node, value); + } + @Override + public double getGroupInfoDouble(World world, String group, String node, double defaultValue) + { + return getGroupInfoDouble(world.getName(), group, node, defaultValue); + } + @Override + public void setGroupInfoDouble(World world, String group, String node, double value) + { + setGroupInfoDouble(world.getName(), group, node, value); + } + @Override + public boolean getPlayerInfoBoolean(String world, OfflinePlayer player, String node, boolean defaultValue) + { + return getPlayerInfoBoolean(world, player.getName(), node, defaultValue); + } + @Override + public boolean getPlayerInfoBoolean(Player player, String node, boolean defaultValue) + { + return getPlayerInfoBoolean(player.getWorld().getName(), player, node, defaultValue); + } + @Override + public void setPlayerInfoBoolean(String world, OfflinePlayer player, String node, boolean value) + { + setPlayerInfoBoolean(world, player.getName(), node, value); + } + @Override + public void setPlayerInfoBoolean(Player player, String node, boolean value) + { + setPlayerInfoBoolean(player.getWorld().getName(), player, node, value); + } + @Override + public boolean getGroupInfoBoolean(World world, String group, String node, boolean defaultValue) + { + return getGroupInfoBoolean(world.getName(), group, node, defaultValue); + } + @Override + public void setGroupInfoBoolean(World world, String group, String node, boolean value) + { + setGroupInfoBoolean(world.getName(), group, node, value); + } + @Override + public String getPlayerInfoString(String world, OfflinePlayer player, String node, String defaultValue) + { + return getPlayerInfoString(world, player.getName(), node, defaultValue); + } + @Override + public String getPlayerInfoString(Player player, String node, String defaultValue) + { + return getPlayerInfoString(player.getWorld().getName(), player, node, defaultValue); + } + @Override + public void setPlayerInfoString(String world, OfflinePlayer player, String node, String value) + { + setPlayerInfoString(world, player.getName(), node, value); + } + @Override + public void setPlayerInfoString(Player player, String node, String value) + { + setPlayerInfoString(player.getWorld().getName(), player, node, value); + } + @Override + public String getGroupInfoString(World world, String group, String node, String defaultValue) + { + return getGroupInfoString(world.getName(), group, node, defaultValue); + } + @Override + public void setGroupInfoString(World world, String group, String node, String value) + { + setGroupInfoString(world.getName(), group, node, value); + } + @Override + public boolean playerInGroup(String world, OfflinePlayer player, String group) + { + // return perms.playerInGroup(world, player, group); + return false; + } + @Override + public boolean playerInGroup(Player player, String group) + { + // return playerInGroup(player.getWorld().getName(), player, group); + return false; + } + @Override + public String[] getPlayerGroups(String world, OfflinePlayer player) + { + // return perms.getPlayerGroups(world, player); + return null; + } + @Override + public String[] getPlayerGroups(Player player) + { + // return getPlayerGroups(player.getWorld().getName(), player); + return null; + } + @Override + public String getPrimaryGroup(String world, OfflinePlayer player) + { + // return perms.getPrimaryGroup(world, player); + return ""; + } + @Override + public String getPrimaryGroup(Player player) + { + return getPrimaryGroup(player.getWorld().getName(), player); + } + @Override + public String[] getGroups() + { + // return perms.getGroups(); + return null; + } +} \ No newline at end of file diff --git a/src/main/java/ru/simsonic/rscPermissions/Frontends/VaultPermission.java b/src/main/java/ru/simsonic/rscPermissions/Frontends/VaultPermission.java new file mode 100644 index 0000000..a960055 --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/Frontends/VaultPermission.java @@ -0,0 +1,289 @@ +package ru.simsonic.rscPermissions.Frontends; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.permissions.PermissionAttachment; +import org.bukkit.permissions.PermissionAttachmentInfo; +import ru.simsonic.rscPermissions.MainPluginClass; + +public class VaultPermission extends net.milkbowl.vault.permission.Permission +{ + private final MainPluginClass rscp; + public VaultPermission(MainPluginClass plugin) + { + this.rscp = plugin; + } + @Override + public String getName() + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean isEnabled() + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean hasSuperPermsCompat() + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean playerHas(String world, String player, String permission) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean playerAdd(String world, String player, String permission) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean playerRemove(String world, String player, String permission) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean groupHas(String world, String group, String permission) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean groupAdd(String world, String group, String permission) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean groupRemove(String world, String group, String permission) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean playerInGroup(String world, String player, String group) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean playerAddGroup(String world, String player, String group) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean playerRemoveGroup(String world, String player, String group) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public String[] getPlayerGroups(String world, String player) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public String getPrimaryGroup(String world, String player) + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public String[] getGroups() + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean hasGroupSupport() + { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + @Override + public boolean has(CommandSender sender, String permission) + { + return sender.hasPermission(permission); + } + @Override + public boolean has(Player player, String permission) + { + return player.hasPermission(permission); + } + @Override + public boolean playerHas(String world, OfflinePlayer player, String permission) + { + if(world == null) + return has((String)null, player.getName(), permission); + return has(world, player.getName(), permission); + } + @Override + public boolean playerHas(Player player, String permission) + { + return has(player, permission); + } + @Override + public boolean playerAdd(String world, OfflinePlayer player, String permission) + { + if(world == null) + return playerAdd((String)null, player.getName(), permission); + return playerAdd(world, player.getName(), permission); + } + @Override + public boolean playerAdd(Player player, String permission) + { + return playerAdd(player.getWorld().getName(), player, permission); + } + @Override + public boolean playerAddTransient(OfflinePlayer player, String permission) throws UnsupportedOperationException + { + if(player.isOnline()) + return playerAddTransient((Player)player, permission); + throw new UnsupportedOperationException(getName() + " does not support offline player transient permissions!"); + } + @Override + public boolean playerAddTransient(Player player, String permission) + { + for(PermissionAttachmentInfo paInfo : player.getEffectivePermissions()) + if(paInfo.getAttachment() != null && paInfo.getAttachment().getPlugin().equals(plugin)) + { + paInfo.getAttachment().setPermission(permission, true); + return true; + } + + PermissionAttachment attach = player.addAttachment(plugin); + attach.setPermission(permission, true); + + return true; + } + @Override + public boolean playerAddTransient(String worldName, OfflinePlayer player, String permission) + { + return playerAddTransient(worldName, player.getName(), permission); + } + @Override + public boolean playerAddTransient(String worldName, Player player, String permission) + { + return playerAddTransient(player, permission); + } + @Override + public boolean playerRemoveTransient(String worldName, OfflinePlayer player, String permission) + { + return playerRemoveTransient(worldName, player.getName(), permission); + } + @Override + public boolean playerRemoveTransient(String worldName, Player player, String permission) + { + return playerRemoveTransient(worldName, (OfflinePlayer)player, permission); + } + @Override + public boolean playerRemove(String world, OfflinePlayer player, String permission) + { + if(world == null) + return playerRemove((String)null, player.getName(), permission); + return playerRemove(world, player.getName(), permission); + } + @Deprecated + @Override + public boolean playerRemove(World world, String player, String permission) + { + if(world == null) + return playerRemove((String)null, player, permission); + return playerRemove(world.getName(), player, permission); + } + @Override + public boolean playerRemove(Player player, String permission) + { + return playerRemove(player.getWorld().getName(), player, permission); + } + @Override + public boolean playerRemoveTransient(OfflinePlayer player, String permission) + { + if(player.isOnline()) + return playerRemoveTransient((Player)player, permission); + else + return false; + } + @Override + public boolean playerRemoveTransient(Player player, String permission) + { + for(PermissionAttachmentInfo paInfo : player.getEffectivePermissions()) + if(paInfo.getAttachment() != null && paInfo.getAttachment().getPlugin().equals(plugin)) + { + paInfo.getAttachment().unsetPermission(permission); + return true; + } + return false; + } + @Override + public boolean groupHas(World world, String group, String permission) + { + if(world == null) + return groupHas((String)null, group, permission); + return groupHas(world.getName(), group, permission); + } + @Override + public boolean groupAdd(World world, String group, String permission) + { + if(world == null) + return groupAdd((String)null, group, permission); + return groupAdd(world.getName(), group, permission); + } + @Override + public boolean groupRemove(World world, String group, String permission) + { + if(world == null) + return groupRemove((String)null, group, permission); + return groupRemove(world.getName(), group, permission); + } + @Override + public boolean playerInGroup(String world, OfflinePlayer player, String group) + { + if(world == null) + return playerInGroup((String)null, player.getName(), group); + return playerInGroup(world, player.getName(), group); + } + @Override + public boolean playerInGroup(Player player, String group) + { + return playerInGroup(player.getWorld().getName(), player, group); + } + @Override + public boolean playerAddGroup(String world, OfflinePlayer player, String group) + { + if(world == null) + return playerAddGroup((String)null, player.getName(), group); + return playerAddGroup(world, player.getName(), group); + } + @Override + public boolean playerAddGroup(Player player, String group) + { + return playerAddGroup(player.getWorld().getName(), player, group); + } + @Override + public boolean playerRemoveGroup(String world, OfflinePlayer player, String group) + { + if(world == null) + return playerRemoveGroup((String)null, player.getName(), group); + return playerRemoveGroup(world, player.getName(), group); + } + @Override + public boolean playerRemoveGroup(Player player, String group) + { + return playerRemoveGroup(player.getWorld().getName(), player, group); + } + @Override + public String[] getPlayerGroups(String world, OfflinePlayer player) + { + return getPlayerGroups(world, player.getName()); + } + @Override + public String[] getPlayerGroups(Player player) + { + return getPlayerGroups(player.getWorld().getName(), player); + } + @Override + public String getPrimaryGroup(String world, OfflinePlayer player) + { + return getPrimaryGroup(world, player.getName()); + } + @Override + public String getPrimaryGroup(Player player) + { + return getPrimaryGroup(player.getWorld().getName(), player); + } +} \ No newline at end of file diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/AbstractPermissionsCache.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/AbstractPermissionsCache.java new file mode 100644 index 0000000..9380af9 --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/AbstractPermissionsCache.java @@ -0,0 +1,13 @@ +package ru.simsonic.rscPermissions.InternalCache; +import ru.simsonic.rscPermissions.DataTypes.RowEntity; +import ru.simsonic.rscPermissions.DataTypes.RowInheritance; +import ru.simsonic.rscPermissions.DataTypes.RowLadder; +import ru.simsonic.rscPermissions.DataTypes.RowPermission; + +public interface AbstractPermissionsCache +{ + public int ImportEntities(RowEntity[] rows); + public int ImportPermissions(RowPermission[] rows); + public int ImportInheritance(RowInheritance[] rows); + public int ImportLadders(RowLadder[] rows); +} diff --git a/src/main/java/ru/simsonic/rscPermissions/AsyncPlayerInfo.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/AsyncPlayerInfo.java similarity index 95% rename from src/main/java/ru/simsonic/rscPermissions/AsyncPlayerInfo.java rename to src/main/java/ru/simsonic/rscPermissions/InternalCache/AsyncPlayerInfo.java index 763a7c1..7033004 100644 --- a/src/main/java/ru/simsonic/rscPermissions/AsyncPlayerInfo.java +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/AsyncPlayerInfo.java @@ -1,11 +1,11 @@ -package ru.simsonic.rscPermissions; +package ru.simsonic.rscPermissions.InternalCache; import java.util.Set; import java.util.UUID; import org.bukkit.Location; import org.bukkit.entity.Player; import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowPermission; -import ru.simsonic.rscPermissions.LocalCacheTree.ResolutionLeaf; +import ru.simsonic.rscPermissions.InternalCache.LocalCacheTree.ResolutionLeaf; public class AsyncPlayerInfo { diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java new file mode 100644 index 0000000..6494d93 --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java @@ -0,0 +1,230 @@ +package ru.simsonic.rscPermissions.InternalCache; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; +import org.bukkit.entity.Player; +import ru.simsonic.rscPermissions.DataTypes.EntityType; +import ru.simsonic.rscPermissions.DataTypes.RowEntity; +import ru.simsonic.rscPermissions.DataTypes.RowInheritance; +import ru.simsonic.rscPermissions.DataTypes.RowLadder; +import ru.simsonic.rscPermissions.DataTypes.RowPermission; +import ru.simsonic.rscPermissions.MainPluginClass; + +public class BrandNewCache implements AbstractPermissionsCache +{ + protected final MainPluginClass plugin; + protected BrandNewCache(MainPluginClass rscp) + { + this.plugin = rscp; + } + protected final RowInheritance defaultInheritance = new RowInheritance(); + public void setDefaultGroup(String defaultGroup) + { + defaultInheritance.parent = defaultGroup; + defaultInheritance.deriveInstance(); + } + protected final HashMap entities_g = new HashMap<>(); + protected final HashMap entities_u = new HashMap<>(); + protected final ArrayList permissions_p2g = new ArrayList<>(); + protected final ArrayList permissions_p2u = new ArrayList<>(); + protected final ArrayList inheritance_g2g = new ArrayList<>(); + protected final ArrayList inheritance_g2u = new ArrayList<>(); + protected final ArrayList ladders_g = new ArrayList<>(); + protected final ArrayList ladders_u = new ArrayList<>(); + public static class InheritanceLeaf implements Comparable + { + public RowInheritance node; + public String instantiator; + public InheritanceLeaf[] subleafs; + public String resolvedPrefix; + public String resolvedSuffix; + @Override + public int compareTo(InheritanceLeaf other) + { + return (other.node != null && node != null) ? other.node.compareTo(node) : 0; + } + } + public static class ResolutionParams + { + public String[] applicableIdentifiers; + public String[] destRegions; + public String destWorld; + public String destServerId; + } + public static class ResolutionResult + { + public String prefix; + public String suffix; + public RowPermission[] permissions; + } + final HashMap entityTrees = new HashMap<>(); + // Права по сущностям + final HashMap groupPermissions = new HashMap<>(); + final HashMap playerPermissions = new HashMap<>(); + private void buildEntityTree() + { + final HashSet entitiesWhichInherits = new HashSet<>(); + for(RowInheritance row : inheritance_g2u) + entitiesWhichInherits.add(row.entity); + for(String inheritingEntity : entitiesWhichInherits) + { + final ArrayList entityDirectParents = new ArrayList<>(); + for(RowInheritance row : inheritance_g2u) + if(row.entity.equalsIgnoreCase(inheritingEntity)) + entityDirectParents.add(row); + Collections.sort(entityDirectParents); + for(RowInheritance row : entityDirectParents) + this.entityTrees.put(inheritingEntity, buildBranch(row)); + } + } + private InheritanceLeaf buildBranch(RowInheritance source) + { + final InheritanceLeaf result = new InheritanceLeaf(); + result.node = source; + result.instantiator = source.instance; + final String entityName = source.entity.toLowerCase(); + if(entities_g.containsKey(entityName)) + { + result.resolvedPrefix = entities_g.get(entityName).prefix; + result.resolvedSuffix = entities_g.get(entityName).suffix; + } + final ArrayList parents = new ArrayList<>(); + for(RowInheritance row : inheritance_g2g) + if(row.parent.equalsIgnoreCase(source.entity)) + parents.add(row); + Collections.sort(parents); + final ArrayList subleafs = new ArrayList<>(); + for(RowInheritance row : parents) + subleafs.add(buildBranch(row)); + result.subleafs = subleafs.toArray(new InheritanceLeaf[subleafs.size()]); + return result; + } + private static String[] getPlayerIdentifiers(Player player) + { + final ArrayList result = new ArrayList<>(); + // For old servers Player's name can be used as entity name + try + { + // minecraft <= 1.7.x + result.add(player.getName()); + } catch(RuntimeException | NoSuchMethodError ex) { + // minecraft >= 1.8 + } + // For newest servers Player's UUID is used as entity name + try + { + // minecraft >= 1.8 + result.add(player.getUniqueId().toString().toLowerCase()); + } catch(RuntimeException | NoSuchMethodError ex) { + // minecraft <= 1.7.x + } + // IP address of a Player can be used as entity name too + result.add(player.getAddress().getAddress().getHostAddress()); + return result.toArray(new String[result.size()]); + } + public void resolvePlayer(Player player) + { + final ResolutionParams params = new ResolutionParams(); + params.applicableIdentifiers = getPlayerIdentifiers(player); + if(plugin.regionListProvider != null) + { + Set regionSet = plugin.regionListProvider.GetRegionList(player); + params.destRegions = regionSet.toArray(new String[regionSet.size()]); + } else + params.destRegions = new String[] {}; + params.destWorld = player.getLocation().getWorld().getName(); + params.destServerId = plugin.getServer().getServerId(); + // TO DO + } + public void resolvePlayer(String player) + { + final ResolutionParams params = new ResolutionParams(); + params.applicableIdentifiers = new String[] { player }; + params.destRegions = new String[] {}; + params.destWorld = ""; + params.destServerId = plugin.getServer().getServerId(); + // TO DO + } + private void resolvePlayer(ResolutionParams params) + { + final ArrayList leafs = new ArrayList<>(); + for(String identifier : params.applicableIdentifiers) + for(String tree : entityTrees.keySet()) + if(tree.equals(identifier)) + leafs.add(entityTrees.get(tree)); + Collections.sort(leafs); + final InheritanceLeaf root = new InheritanceLeaf(); + } + public void recoursion(ResolutionParams params, InheritanceLeaf branch) + { + for(InheritanceLeaf leaf : branch.subleafs) + { + } + } + @Override + public synchronized int ImportEntities(RowEntity[] rows) + { + entities_g.clear(); + entities_u.clear(); + if(rows == null) + return 0; + for(RowEntity row : rows) + { + if(row.entityType == EntityType.group) + entities_g.put(row.entity.toLowerCase(), row); + else + entities_u.put(row.entity.toLowerCase(), row); + } + return entities_g.size() + entities_u.size(); + } + @Override + public synchronized int ImportPermissions(RowPermission[] rows) + { + permissions_p2g.clear(); + permissions_p2u.clear(); + if(rows == null) + return 0; + for(RowPermission row : rows) + { + if(row.entityType == EntityType.group) + permissions_p2g.add(row); + else + permissions_p2u.add(row); + } + return permissions_p2g.size() + permissions_p2u.size(); + } + @Override + public synchronized int ImportInheritance(RowInheritance[] rows) + { + inheritance_g2g.clear(); + inheritance_g2u.clear(); + if(rows == null) + return 0; + for(RowInheritance row : rows) + { + if(row.childType == EntityType.group) + inheritance_g2g.add(row); + else + inheritance_g2u.add(row); + } + return inheritance_g2g.size() + inheritance_g2u.size(); + } + @Override + public synchronized int ImportLadders(RowLadder[] rows) + { + ladders_g.clear(); + ladders_u.clear(); + if(rows == null) + return 0; + for(RowLadder row : rows) + { + if(row.climberType == EntityType.group) + ladders_g.add(row); + else + ladders_u.add(row); + } + return ladders_g.size() + ladders_u.size(); + } +} \ No newline at end of file diff --git a/src/main/java/ru/simsonic/rscPermissions/LocalCacheData.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheData.java similarity index 80% rename from src/main/java/ru/simsonic/rscPermissions/LocalCacheData.java rename to src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheData.java index 9f6a849..44e78f2 100644 --- a/src/main/java/ru/simsonic/rscPermissions/LocalCacheData.java +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheData.java @@ -1,10 +1,10 @@ -package ru.simsonic.rscPermissions; +package ru.simsonic.rscPermissions.InternalCache; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.concurrent.ConcurrentHashMap; import ru.simsonic.rscPermissions.DataTypes.*; -import ru.simsonic.rscPermissions.DataTypes.RowEntity.EntityType; +import ru.simsonic.rscPermissions.DataTypes.EntityType; +import ru.simsonic.rscPermissions.MainPluginClass; public class LocalCacheData { @@ -19,7 +19,6 @@ public class LocalCacheData protected final ArrayList inheritance_g2u = new ArrayList<>(); protected final ArrayList ladders_g = new ArrayList<>(); protected final ArrayList ladders_u = new ArrayList<>(); - protected final ArrayList servers = new ArrayList<>(); protected LocalCacheData(MainPluginClass rscp) { this.plugin = rscp; @@ -32,7 +31,7 @@ public class LocalCacheData return 0; for(RowEntity row : rows) { - if(row.entity_type == EntityType.groupName) + if(row.entityType == EntityType.group) entities_g.put(row.entity.toLowerCase(), row); else entities_u.put(row.entity.toLowerCase(), row); @@ -47,7 +46,7 @@ public class LocalCacheData return 0; for(RowPermission row : rows) { - if(row.entity_type == EntityType.groupName) + if(row.entityType == EntityType.group) permissions_p2g.add(row); else permissions_p2u.add(row); @@ -62,7 +61,7 @@ public class LocalCacheData return 0; for(RowInheritance row : rows) { - if(row.child_type == EntityType.groupName) + if(row.childType == EntityType.group) inheritance_g2g.add(row); else inheritance_g2u.add(row); @@ -77,19 +76,11 @@ public class LocalCacheData return 0; for(RowLadder row : rows) { - if(row.climber_type == EntityType.groupName) + if(row.climberType == EntityType.group) ladders_g.add(row); else ladders_u.add(row); } return ladders_g.size() + ladders_u.size(); } - public synchronized int ImportServers(RowServer[] rows) - { - servers.clear(); - if(rows == null) - return 0; - servers.addAll(Arrays.asList(rows)); - return servers.size(); - } } \ No newline at end of file diff --git a/src/main/java/ru/simsonic/rscPermissions/LocalCacheFunctions.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java similarity index 92% rename from src/main/java/ru/simsonic/rscPermissions/LocalCacheFunctions.java rename to src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java index 3bc4461..0d317b6 100644 --- a/src/main/java/ru/simsonic/rscPermissions/LocalCacheFunctions.java +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java @@ -1,4 +1,4 @@ -package ru.simsonic.rscPermissions; +package ru.simsonic.rscPermissions.InternalCache; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -7,6 +7,8 @@ import ru.simsonic.rscPermissions.DataTypes.RowEntity; 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; public class LocalCacheFunctions extends LocalCacheTree { diff --git a/src/main/java/ru/simsonic/rscPermissions/LocalCacheTree.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java similarity index 89% rename from src/main/java/ru/simsonic/rscPermissions/LocalCacheTree.java rename to src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java index 829647b..20907c6 100644 --- a/src/main/java/ru/simsonic/rscPermissions/LocalCacheTree.java +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java @@ -1,4 +1,4 @@ -package ru.simsonic.rscPermissions; +package ru.simsonic.rscPermissions.InternalCache; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -10,6 +10,8 @@ import ru.simsonic.rscPermissions.DataTypes.RowEntity; 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.utilities.LanguageUtility; public class LocalCacheTree extends LocalCacheData @@ -24,19 +26,13 @@ public class LocalCacheTree extends LocalCacheData { super(rscp); } - protected final ConcurrentHashMap> mapTrees = new ConcurrentHashMap<>(); - protected final ConcurrentHashMap> mapPermissions = new ConcurrentHashMap<>(); + public final ConcurrentHashMap> mapTrees = new ConcurrentHashMap<>(); + public final ConcurrentHashMap> mapPermissions = new ConcurrentHashMap<>(); protected final RowInheritance defaultInheritance = new RowInheritance(); - public void updateDefaultInheritance() + public void setDefaultGroup(String defaultGroup) { - defaultInheritance.parent = plugin.settings.getDefaultGroup(); - String[] breaked = defaultInheritance.parent.split(Settings.separatorRegExp); - if(breaked.length == 2) - { - defaultInheritance.parent = breaked[0]; - defaultInheritance.instance = breaked[1]; - } else - defaultInheritance.instance = null; + defaultInheritance.parent = defaultGroup; + defaultInheritance.deriveInstance(); } public synchronized void clear() { @@ -87,7 +83,7 @@ public class LocalCacheTree extends LocalCacheData final AsyncPlayerInfo api = new AsyncPlayerInfo(player, plugin.regionListProvider.GetRegionList(player)); plugin.recalculatingPlayers.offer(api); } - protected synchronized HashMap treeToPermissions(AsyncPlayerInfo p2rc) + public synchronized HashMap treeToPermissions(AsyncPlayerInfo p2rc) { final HashMap permissions = new HashMap<>(); String prefix = ""; diff --git a/src/main/java/ru/simsonic/rscPermissions/Ladders.java b/src/main/java/ru/simsonic/rscPermissions/Ladders.java index 9386580..d98c84e 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Ladders.java +++ b/src/main/java/ru/simsonic/rscPermissions/Ladders.java @@ -114,7 +114,7 @@ public class Ladders "{GOLD}on" ) : "removed from" ) + " the ladder {_LG}" + position.ladder + ((instance != null) ? "{_DS}(" + instance + ")" : "") + "{GOLD}."; - plugin.Message(player, resultP); + plugin.formattedMessage(player, resultP); return new String [] { resultS }; } } \ No newline at end of file diff --git a/src/main/java/ru/simsonic/rscPermissions/MainPluginClass.java b/src/main/java/ru/simsonic/rscPermissions/MainPluginClass.java index f107ede..d6b7491 100644 --- a/src/main/java/ru/simsonic/rscPermissions/MainPluginClass.java +++ b/src/main/java/ru/simsonic/rscPermissions/MainPluginClass.java @@ -1,4 +1,6 @@ package ru.simsonic.rscPermissions; +import ru.simsonic.rscPermissions.InternalCache.LocalCacheFunctions; +import ru.simsonic.rscPermissions.InternalCache.AsyncPlayerInfo; import java.io.IOException; import java.util.HashMap; import java.util.concurrent.LinkedBlockingQueue; @@ -21,6 +23,9 @@ import org.bukkit.permissions.PermissionAttachment; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitScheduler; import org.mcstats.MetricsLite; +import ru.simsonic.rscPermissions.Frontends.VaultChat; +import ru.simsonic.rscPermissions.Frontends.VaultPermission; +import ru.simsonic.utilities.CommandAnswerException; import ru.simsonic.utilities.LanguageUtility; import ru.simsonic.utilities.MovingPlayersCatcher; @@ -43,6 +48,8 @@ public final class MainPluginClass extends JavaPlugin implements Listener public final HashMap attachments = new HashMap<>(); public final LinkedBlockingQueue recalculatingPlayers = new LinkedBlockingQueue<>(); // private final HashSet verbosePlayers = new HashSet<>(); + private final VaultPermission vaultP = new VaultPermission(this); + private final VaultChat vaultC = new VaultChat(this, vaultP); @Override public void onLoad() { @@ -68,7 +75,7 @@ public final class MainPluginClass extends JavaPlugin implements Listener // WorldGuard, Residence and other possible region list providers regionListProvider.integrate(); // Start all needed threads - cache.updateDefaultInheritance(); + cache.setDefaultGroup(settings.getDefaultGroup()); StartRecalcThread(); RegionFinderThreadStart(); connectionList.threadFetchTablesData(); @@ -77,7 +84,7 @@ public final class MainPluginClass extends JavaPlugin implements Listener { updater = new Updater(this, projectNumberInDBO, this.getFile(), Updater.UpdateType.NO_DOWNLOAD, false); if(updater.getResult() == Updater.UpdateResult.UPDATE_AVAILABLE) - infoAboutUpdate(getServer().getConsoleSender()); + showAdminUpdateInfo(getServer().getConsoleSender()); else updater = null; } @@ -95,7 +102,7 @@ public final class MainPluginClass extends JavaPlugin implements Listener } consoleLog.info("[rscp] rscPermissions has been successfully enabled."); } - private void infoAboutUpdate(CommandSender sender) + private void showAdminUpdateInfo(CommandSender sender) { if(updater != null) { @@ -104,9 +111,9 @@ public final class MainPluginClass extends JavaPlugin implements Listener consoleLog.info("[rscp] Update is available! Enter /rscp update to update plugin now."); consoleLog.info("[rscp] Please be noted that after restart updated file will have name including old version."); } else if(sender.hasPermission("rscp.admin")) { - Message(sender, "Update is available: {_LB}" + updater.getLatestName() + "{GOLD}!"); - Message(sender, "Enter {_LG}/rscp update{GOLD} to update plugin now."); - Message(sender, "Please be noted that after restart updated file will have name including old version."); + formattedMessage(sender, "Update is available: {_LB}" + updater.getLatestName() + "{GOLD}!"); + formattedMessage(sender, "Enter {_LG}/rscp update{GOLD} to update plugin now."); + formattedMessage(sender, "Please be noted that after restart updated file will have name including old version."); } } } @@ -262,7 +269,7 @@ public final class MainPluginClass extends JavaPlugin implements Listener try { commandExecutor.onCommand(sender, cmd, label, args); - } catch(CommandHelperAnswerException ex) { + } catch(CommandAnswerException ex) { for(String answer : ex.getMessageArray()) sender.sendMessage(LanguageUtility.processStringStatic(chatPrefix + answer)); } catch(NullPointerException ex) { @@ -288,10 +295,7 @@ public final class MainPluginClass extends JavaPlugin implements Listener @org.bukkit.event.EventHandler public void onPlayerJoin(PlayerJoinEvent event) { - infoAboutUpdate(event.getPlayer()); - // Show list of player's rewards - if(settings.isRewardsEnabled()) - commandExecutor.rewardHelper.executeReward(event.getPlayer(), null); + showAdminUpdateInfo(event.getPlayer()); } @org.bukkit.event.EventHandler public void onPlayerExp(PlayerLevelChangeEvent event) @@ -315,7 +319,7 @@ public final class MainPluginClass extends JavaPlugin implements Listener attachments.remove(event.getPlayer()); regionListProvider.removePlayer(event.getPlayer()); } - public void Message(CommandSender sender, String message) + public void formattedMessage(CommandSender sender, String message) { if(message == null || "".equals(message)) return; diff --git a/src/main/java/ru/simsonic/rscPermissions/Rewards.java b/src/main/java/ru/simsonic/rscPermissions/Rewards.java deleted file mode 100644 index af83421..0000000 --- a/src/main/java/ru/simsonic/rscPermissions/Rewards.java +++ /dev/null @@ -1,180 +0,0 @@ -package ru.simsonic.rscPermissions; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.logging.Level; -import org.bukkit.entity.Player; -import org.bukkit.permissions.PermissionAttachment; -import ru.simsonic.rscPermissions.DataTypes.RowReward; -import ru.simsonic.utilities.TimeIntervalParser; - -public class Rewards -{ - private static final String strCommandExecutorPlayer = "player:"; - private static final String strCommandExecutorConsole = "console:"; - private final MainPluginClass plugin; - public Rewards(MainPluginClass rscp) - { - this.plugin = rscp; - } - protected final HashMap> rewards = new HashMap<>(); - public synchronized int ImportRewards(RowReward[] rows) - { - rewards.clear(); - if(rows == null) - return 0; - int total_rewards = 0; - for(RowReward row : rows) - { - ArrayList userRewards = rewards.get(row.user.toLowerCase()); - if(userRewards == null) - { - userRewards = new ArrayList<>(); - rewards.put(row.user.toLowerCase(), userRewards); - } - userRewards.add(row); - total_rewards += 1; - } - return total_rewards; - } - public synchronized HashMap getAvailableRewards(String user) - { - final HashMap result = new HashMap<>(); - ArrayList user_rewards = rewards.get(user.toLowerCase()); - if(user_rewards != null) - for(RowReward reward : user_rewards) - result.put(reward.code, result.get(reward.code) + 1); - return result; - } - public synchronized RowReward getRewardDetails(String user, String code) - { - if((user == null) || (code == null)) - return null; - if("".equals(user) || "".equals(code)) - return null; - ArrayList user_rewards = rewards.get(user.toLowerCase()); - for(RowReward row : user_rewards) - if(row.code.equalsIgnoreCase(code)) - return row; - return null; - } - public void executeReward(final Player player, String reward) - { - if(plugin.settings.isRewardsEnabled() == false) - { - plugin.Message(player, "Rewards support has been disabled by administrator."); - return; - } - final HashMap reward_list = getAvailableRewards(player.getName()); - if(reward == null) - { - if(reward_list.isEmpty() == false) - { - String text = ""; - for(String code : reward_list.keySet()) - { - Integer count = reward_list.get(code); - text += ((count > 1) ? code + " (" + count.toString() + "), " : code + ", "); - } - plugin.Message(player, "Available rewards: {_R}" + text.substring(0, text.length() - 2) + "."); - } - else - plugin.Message(player, "No rewards available."); - return; - } - for(String code : reward_list.keySet()) - if(code.equalsIgnoreCase(reward)) - reward = code; - final String correctFinalReward = reward; - Integer count = reward_list.get(reward); - if(count != null) - { - Thread rewardExecutor = new Thread() - { - @Override - public void run() - { - Thread.currentThread().setName("rscp:Rewarder"); - Thread.currentThread().setPriority(Thread.MIN_PRIORITY); - try - { - plugin.connectionList.threadFetchTablesData().join(); - final RowReward details = getRewardDetails(player.getName(), correctFinalReward); - threadApplyReward(player, details); - plugin.connectionList.threadFetchTablesData().join(); - } catch(InterruptedException ex) { - } - plugin.Message(player, "You have received reward \"" + correctFinalReward + "\"!"); - } - }; - rewardExecutor.start(); - } - else - plugin.Message(player, "No such reward available for you."); - } - public void threadApplyReward(final Player player, final RowReward reward) - { - if((reward == null) || (player == null)) - return; - if(reward.add_group != null) - { - if(reward.add_group_destination != null) - { - } - if(reward.add_group_expirience != 0) - { - } - if(reward.add_group_interval != null) - { - int seconds = TimeIntervalParser.parseTimeInterval(reward.add_group_interval); - } - } - if(reward.execute_commands != null) - { - final String[] commands = reward.execute_commands.split("[\r\n]+"); - plugin.getServer().getScheduler().runTask(plugin, new Runnable() - { - @Override - public void run() - { - PermissionAttachment temporary = player.addAttachment(plugin); - if(reward.command_permissions != null) - { - String[] permissions = reward.command_permissions.split("[\r\n]+"); - for(String permission : permissions) - { - MainPluginClass.consoleLog.log(Level.INFO, "[rscp] + temp perm: \"{0}\"", permission); - temporary.setPermission(permission, true); - } - } - player.recalculatePermissions(); - for(String command : commands) - { - boolean bConsole = false; - if(command.toLowerCase().startsWith(strCommandExecutorConsole)) - { - command = command.substring(strCommandExecutorConsole.length()); - bConsole = true; - } - if(command.toLowerCase().startsWith(strCommandExecutorPlayer)) - { - command = command.substring(strCommandExecutorPlayer.length()); - bConsole = false; - } - MainPluginClass.consoleLog.log(Level.INFO, - "[rscp] Reward \"{0}\" for user \"{1}\" executes command:\n{2} /{3}", new Object[] - { - reward.code, - player.getName(), - bConsole ? strCommandExecutorConsole : strCommandExecutorPlayer, - command, - }); - plugin.getServer().dispatchCommand(bConsole ? plugin.getServer().getConsoleSender() : player, command); - player.sendMessage("You've received reward \"" + reward.code + "\"."); - } - player.removeAttachment(temporary); - player.recalculatePermissions(); - } - }); - } - } -} \ No newline at end of file diff --git a/src/main/java/ru/simsonic/rscPermissions/Settings.java b/src/main/java/ru/simsonic/rscPermissions/Settings.java index a70cecd..86a986d 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Settings.java +++ b/src/main/java/ru/simsonic/rscPermissions/Settings.java @@ -14,14 +14,13 @@ public class Settings private String strMaintenanceMode = ""; private boolean bAlwaysInheritDefault = false; private boolean bTreatAsteriskAsOP = true; - private boolean bRewardsEnabled = false; private boolean bUseMetrics = true; private boolean bUseUpdater = true; private boolean bUseWorldGuard = true; private boolean bUseResidence = true; private int nAutoReloadDelayTicks = 20 * 900; private int nRegionFinderGranularity = 1000; - public final int CurrentVersion = 2; + public final int CurrentVersion = 3; public static final String separator = "."; public static final String separatorRegExp = "\\."; public static final String instantiator = "?"; @@ -39,6 +38,9 @@ public class Settings 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; @@ -51,21 +53,25 @@ public class Settings 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("internal.version", 3); + } 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); - bRewardsEnabled = config.getBoolean("settings.enable-rewards", false); - bUseMetrics = config.getBoolean("settings.use-metrics", true); - bUseUpdater = config.getBoolean("settings.auto-update", true); - bUseWorldGuard = config.getBoolean("settings.integration.worldguard", true); - bUseResidence = config.getBoolean("settings.integration.residence", true); - nAutoReloadDelayTicks = 20 * config.getInt("settings.auto-reload-delay-sec", 900); - nRegionFinderGranularity = config.getInt("settings.region-finder-thread-granularity-msec", 1000); + 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); + bUseUpdater = config.getBoolean("settings.auto-update", 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); } public String getDefaultGroup() { @@ -93,10 +99,6 @@ public class Settings { return bTreatAsteriskAsOP; } - public boolean isRewardsEnabled() - { - return bRewardsEnabled; - } public boolean isUseMetrics() { return bUseMetrics; diff --git a/src/main/java/ru/simsonic/rscPermissions/rscpAPI.java b/src/main/java/ru/simsonic/rscPermissions/rscpAPI.java index 5336627..f5c002a 100644 --- a/src/main/java/ru/simsonic/rscPermissions/rscpAPI.java +++ b/src/main/java/ru/simsonic/rscPermissions/rscpAPI.java @@ -2,24 +2,19 @@ package ru.simsonic.rscPermissions; import java.util.ArrayList; import java.util.HashMap; import java.util.Set; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.permissions.PermissionAttachment; +import org.bukkit.permissions.PermissionAttachmentInfo; public class rscpAPI { - private final ru.simsonic.rscPermissions.MainPluginClass plugin; - protected rscpAPI(MainPluginClass rscp) + private final ru.simsonic.rscPermissions.MainPluginClass rscp; + protected rscpAPI(MainPluginClass plugin) { - this.plugin = rscp; - } - /** - * Vault support method. - * Gets name of permission method - * - * @return Name of Permission Method - */ - public String getName() - { - return plugin.getName(); + this.rscp = plugin; } /** * Vault support method. @@ -29,27 +24,7 @@ public class rscpAPI */ public boolean isEnabled() { - return plugin.isEnabled(); - } - /** - * Vault support method. - * Returns if the permission system is or attempts to be compatible with super-perms. - * - * @return True if this permission implementation works with super-perms - */ - public boolean hasSuperPermsCompat() - { - return true; - } - /** - * Vault permission support method. - * Returns true if the given implementation supports groups. - * - * @return true if the implementation supports groups - */ - public boolean hasGroupSupport() - { - return true; + return rscp.isEnabled(); } /** * Vault permission support method. @@ -63,7 +38,7 @@ public class rscpAPI */ public String getPrimaryGroup(String world, String player) { - return plugin.settings.getDefaultGroup(); + return rscp.settings.getDefaultGroup(); } /** * Vault permission support method. @@ -130,11 +105,11 @@ public class rscpAPI */ public boolean playerHas(String world, String player, String permission) { - Player onlinePlayer = plugin.getServer().getPlayerExact(player); + Player onlinePlayer = rscp.getServer().getPlayerExact(player); if(onlinePlayer != null) return onlinePlayer.hasPermission(permission); - plugin.cache.calculateBasePermissions(player); - HashMap map = plugin.cache.mapPermissions.get(player); + rscp.cache.calculateBasePermissions(player); + HashMap map = rscp.cache.mapPermissions.get(player); if(map != null) { Boolean value = map.get(permission); @@ -233,7 +208,7 @@ public class rscpAPI */ public String[] getPlayerGroups(String world, String player) { - ArrayList list = plugin.cache.getUserGroups(player); + ArrayList list = rscp.cache.getUserGroups(player); return list.toArray(new String[list.size()]); } /** @@ -244,12 +219,12 @@ public class rscpAPI */ public String[] getGroups() { - Set groups = plugin.cache.getAllPossibleGroups(); + Set groups = rscp.cache.getAllPossibleGroups(); return groups.toArray(new String[groups.size()]); } /** * Vault chat support. - * Get players prefix + * Get player's prefix * * @param world World name * @param player Player name @@ -257,7 +232,7 @@ public class rscpAPI */ public String getPlayerPrefix(String world, String player) { - return plugin.cache.userGetPrefix(player); + return rscp.cache.userGetPrefix(player); } /** * Vault chat support. @@ -269,11 +244,11 @@ public class rscpAPI */ public String getPlayerSuffix(String world, String player) { - return plugin.cache.userGetSuffix(player); + return rscp.cache.userGetSuffix(player); } /** * Vault chat support. - * Get players prefix + * Get player's prefix * * @param world World name * @param group Group name @@ -281,7 +256,7 @@ public class rscpAPI */ public String getGroupPrefix(String world, String group) { - return plugin.cache.groupGetPrefix(group); + return rscp.cache.groupGetPrefix(group); } /** * Vault chat support. @@ -293,11 +268,11 @@ public class rscpAPI */ public String getGroupSuffix(String world, String group) { - return plugin.cache.groupGetSuffix(group); + return rscp.cache.groupGetSuffix(group); } /** * Vault chat support. - * Set players prefix + * Set player's prefix * * @param world World name * @param player Player name @@ -310,13 +285,13 @@ public class rscpAPI @Override public void run() { - plugin.connectionList.updateEntityText(player, true, prefix, true); + rscp.connectionList.updateEntityText(player, true, prefix, true); } }.start(); } /** * Vault chat support. - * Set players prefix + * Set player's prefix * * @param world World name * @param player Player name @@ -329,7 +304,7 @@ public class rscpAPI @Override public void run() { - plugin.connectionList.updateEntityText(player, true, suffix, false); + rscp.connectionList.updateEntityText(player, true, suffix, false); } }.start(); } @@ -348,7 +323,7 @@ public class rscpAPI @Override public void run() { - plugin.connectionList.updateEntityText(group, false, prefix, true); + rscp.connectionList.updateEntityText(group, false, prefix, true); } }.start(); } @@ -367,8 +342,439 @@ public class rscpAPI @Override public void run() { - plugin.connectionList.updateEntityText(group, false, suffix, false); + rscp.connectionList.updateEntityText(group, false, suffix, false); } }.start(); } + + /** + * Checks if a CommandSender has a permission node. This will return the result of bukkits, generic .hasPermission() + * method and is identical in all cases. This method will explicitly fail if the registered permission system does + * not register permissions in bukkit. + * + * For easy checking of a commandsender + * + * @param sender to check permissions on + * @param permission to check for + * @return true if the sender has the permission + */ + public boolean has(CommandSender sender, String permission) + { + return sender.hasPermission(permission); + } + + /** + * Checks if player has a permission node. (Short for playerHas(...) + * + * @param player Player Object + * @param permission Permission node + * @return Success or Failure + */ + public boolean has(Player player, String permission) + { + return player.hasPermission(permission); + } + + /** + * Checks if player has a permission node. Supports NULL value for World if the permission system registered supports + * global permissions. But May return odd values if the servers registered permission system does not have a global + * permission store. + * + * @param world String world name + * @param player to check + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerHas(String world, OfflinePlayer player, String permission) + { + // SHOULD BE UPDATED + return playerHas(world, player.getName(), permission); + } + + /** + * Checks if player has a permission node. Defaults to world-specific permission check if the permission system + * supports it. See {@link #playerHas(String, OfflinePlayer, String)} for explicit global or world checks. + * + * @param player Player Object + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerHas(Player player, String permission) + { + return has(player, permission); + } + + /** + * Add permission to a player. Supports NULL value for World if the permission system registered supports global + * permissions. But May return odd values if the servers registered permission system does not have a global + * permission store. + * + * @param world String world name + * @param player to add to + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerAdd(String world, OfflinePlayer player, String permission) + { + if(world == null) + return playerAdd((String)null, player.getName(), permission); + return playerAdd(world, player.getName(), permission); + } + + /** + * Add permission to a player ONLY for the world the player is currently on. This is a world-specific operation, if + * you want to add global permission you must explicitly use NULL for the world. See + * {@link #playerAdd(String, OfflinePlayer, String)} for global permission use. + * + * @param player Player Object + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerAdd(Player player, String permission) + { + return playerAdd(player.getWorld().getName(), player, permission); + } + + /** + * Add transient permission to a player. This implementation can be used by any subclass which implements a "pure" + * superperms plugin, i.e. one that only needs the built-in Bukkit API to add transient permissions to a player. + * + * @param player to add to + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerAddTransient(OfflinePlayer player, String permission) throws UnsupportedOperationException + { + if(player.isOnline()) + return playerAddTransient((Player)player, permission); + throw new UnsupportedOperationException("rscPermissions does not support offline player transient permissions!"); + } + + /** + * Add transient permission to a player. This operation adds a permission onto the player object in bukkit via + * Bukkit's permission interface. + * + * @param player Player Object + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerAddTransient(Player player, String permission) + { + for(PermissionAttachmentInfo paInfo : player.getEffectivePermissions()) + if(paInfo.getAttachment() != null && paInfo.getAttachment().getPlugin().equals(rscp)) + { + paInfo.getAttachment().setPermission(permission, true); + return true; + } + + PermissionAttachment attach = player.addAttachment(rscp); + attach.setPermission(permission, true); + return true; + } + + /** + * Adds a world specific transient permission to the player, may only work with some permission managers. Defaults to + * GLOBAL permissions for any permission system that does not support world-specific transient permissions! + * + * @param worldName to check on + * @param player to add to + * @param permission to test + * @return Success or Failure + */ + public boolean playerAddTransient(String worldName, OfflinePlayer player, String permission) + { + return false; + // return playerAddTransient(worldName, player.getName(), permission); + } + + /** + * Adds a world specific transient permission to the player, may only work with some permission managers. Defaults to + * GLOBAL permissions for any permission system that does not support world-specific transient permissions! + * + * @param worldName to check on + * @param player to check + * @param permission to check for + * @return Success or Failure + */ + public boolean playerAddTransient(String worldName, Player player, String permission) + { + return playerAddTransient(player, permission); + } + + /** + * Removes a world specific transient permission from the player, may only work with some permission managers. + * Defaults to GLOBAL permissions for any permission system that does not support world-specific transient + * permissions! + * + * @param worldName to remove for + * @param player to remove for + * @param permission to remove + * @return Success or Failure + */ + public boolean playerRemoveTransient(String worldName, OfflinePlayer player, String permission) + { + return false; + // return playerRemoveTransient(worldName, player.getName(), permission); + } + + /** + * Removes a world specific transient permission from the player, may only work with some permission managers. + * Defaults to GLOBAL permissions for any permission system that does not support world-specific transient + * permissions! + * + * @param worldName to check on + * @param player to check + * @param permission to check for + * @return Success or Failure + */ + public boolean playerRemoveTransient(String worldName, Player player, String permission) + { + return playerRemoveTransient(worldName, (OfflinePlayer)player, permission); + } + + /** + * Remove permission from a player. Will attempt to remove permission from the player on the player's current world. + * This is NOT a global operation. + * + * @param player Player Object + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerRemove(Player player, String permission) + { + return false; + // return playerRemove(player.getWorld().getName(), player, permission); + } + + /** + * Remove transient permission from a player. This implementation can be used by any subclass which implements a + * "pure" superperms plugin, i.e. one that only needs the built-in Bukkit API to remove transient permissions from a + * player. Any subclass implementing a plugin which provides its own API for this needs to override this method. + * + * @param player OfflinePlayer + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerRemoveTransient(OfflinePlayer player, String permission) + { + if(player.isOnline()) + return playerRemoveTransient((Player)player, permission); + else + return false; + } + + /** + * Remove transient permission from a player. + * + * @param player Player Object + * @param permission Permission node + * @return Success or Failure + */ + public boolean playerRemoveTransient(Player player, String permission) + { + for(PermissionAttachmentInfo paInfo : player.getEffectivePermissions()) + if(paInfo.getAttachment() != null && paInfo.getAttachment().getPlugin().equals(rscp)) + { + paInfo.getAttachment().unsetPermission(permission); + return true; + } + return false; + } + + /** + * Checks if group has a permission node. Supports NULL value for World if the permission system registered supports + * global permissions. But May return odd values if the servers registered permission system does not have a global + * permission store. + * + * @param world World Object + * @param group Group name + * @param permission Permission node + * @return Success or Failure + */ + public boolean groupHas(World world, String group, String permission) + { + if(world == null) + return groupHas((String)null, group, permission); + return groupHas(world.getName(), group, permission); + } + + /** + * Add permission to a group. Supports NULL value for World if the permission system registered supports global + * permissions. But May return odd values if the servers registered permission system does not have a global + * permission store. + * + * @param world World Object + * @param group Group name + * @param permission Permission node + * @return Success or Failure + */ + public boolean groupAdd(World world, String group, String permission) + { + if(world == null) + return groupAdd((String)null, group, permission); + return groupAdd(world.getName(), group, permission); + } + + /** + * Remove permission from a group. Supports NULL value for World if the permission system registered supports global + * permissions. But May return odd values if the servers registered permission system does not have a global + * permission store. + * + * @param world World Object + * @param group Group name + * @param permission Permission node + * @return Success or Failure + */ + public boolean groupRemove(World world, String group, String permission) + { + if(world == null) + return groupRemove((String)null, group, permission); + return groupRemove(world.getName(), group, permission); + } + + /** + * Check if player is member of a group. Supports NULL value for World if the permission system registered supports + * global permissions. But May return odd values if the servers registered permission system does not have a global + * permission store. + * + * @param world World Object + * @param player to check + * @param group Group name + * @return Success or Failure + */ + public boolean playerInGroup(String world, OfflinePlayer player, String group) + { + if(world == null) + return playerInGroup((String)null, player.getName(), group); + return playerInGroup(world, player.getName(), group); + } + + /** + * Check if player is member of a group. This method will ONLY check groups for which the player is in that are + * defined for the current world. This may result in odd return behaviour depending on what permission system has + * been registered. + * + * @param player Player Object + * @param group Group name + * @return Success or Failure + */ + public boolean playerInGroup(Player player, String group) + { + return playerInGroup(player.getWorld().getName(), player, group); + } + + /** + * Add player to a group. Supports NULL value for World if the permission system registered supports global + * permissions. But May return odd values if the servers registered permission system does not have a global + * permission store. + * + * @param world String world name + * @param player to add + * @param group Group name + * @return Success or Failure + */ + public boolean playerAddGroup(String world, OfflinePlayer player, String group) + { + if(world == null) + return playerAddGroup((String)null, player.getName(), group); + return playerAddGroup(world, player.getName(), group); + } + + /** + * Add player to a group. This will add a player to the group on the current World. This may return odd results if + * the permission system being used on the server does not support world-specific groups, or if the group being added + * to is a global group. + * + * @param player Player Object + * @param group Group name + * @return Success or Failure + */ + public boolean playerAddGroup(Player player, String group) + { + return playerAddGroup(player.getWorld().getName(), player, group); + } + + /** + * Remove player from a group. Supports NULL value for World if the permission system registered supports global + * permissions. But May return odd values if the servers registered permission system does not have a global + * permission store. + * + * @param world World Object + * @param player to remove + * @param group Group name + * @return Success or Failure + */ + public boolean playerRemoveGroup(String world, OfflinePlayer player, String group) + { + if(world == null) + return playerRemoveGroup((String)null, player.getName(), group); + return playerRemoveGroup(world, player.getName(), group); + } + + /** + * Remove player from a group. This will add a player to the group on the current World. This may return odd results + * if the permission system being used on the server does not support world-specific groups, or if the group being + * added to is a global group. + * + * @param player Player Object + * @param group Group name + * @return Success or Failure + */ + public boolean playerRemoveGroup(Player player, String group) + { + return playerRemoveGroup(player.getWorld().getName(), player, group); + } + + /** + * Gets the list of groups that this player has Supports NULL value for World if the permission system registered + * supports global permissions. But May return odd values if the servers registered permission system does not have a + * global permission store. + * + * @param world String world name + * @param player OfflinePlayer + * @return Array of groups + */ + public String[] getPlayerGroups(String world, OfflinePlayer player) + { + return getPlayerGroups(world, player.getName()); + } + + /** + * Returns a list of world-specific groups that this player is currently in. May return unexpected results if you are + * looking for global groups, or if the registered permission system does not support world-specific groups. See + * {@link #getPlayerGroups(String, OfflinePlayer)} for better control of World-specific or global groups. + * + * @param player Player Object + * @return Array of groups + */ + public String[] getPlayerGroups(Player player) + { + return getPlayerGroups(player.getWorld().getName(), player); + } + + /** + * Gets players primary group Supports NULL value for World if the permission system registered supports global + * permissions. But May return odd values if the servers registered permission system does not have a global + * permission store. + * + * @param world String world name + * @param player to get from + * @return Players primary group + */ + public String getPrimaryGroup(String world, OfflinePlayer player) + { + return getPrimaryGroup(world, player.getName()); + } + + /** + * Get players primary group. Defaults to the players current world, so may return only world-specific groups. In + * most cases {@link #getPrimaryGroup(String, OfflinePlayer)} is preferable. + * + * @param player Player Object + * @return Players primary group + */ + public String getPrimaryGroup(Player player) + { + return getPrimaryGroup(player.getWorld().getName(), player); + } } \ No newline at end of file diff --git a/src/main/resources/sqlt/Initialize_rewards_v1.sqlt b/src/main/resources/sqlt/Initialize_rewards_v1.sqlt deleted file mode 100644 index 4e7dab1..0000000 --- a/src/main/resources/sqlt/Initialize_rewards_v1.sqlt +++ /dev/null @@ -1,19 +0,0 @@ -CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}rewards` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `user` varchar(64) NOT NULL, - `code` varchar(16) NOT NULL, - `activated` bit(1) NOT NULL DEFAULT b'0', - `activated_timestamp` timestamp NULL DEFAULT NULL, - `execute_commands` varchar(1024) DEFAULT NULL, - `command_permissions` varchar(1024) DEFAULT NULL, - `add_group` varchar(64) DEFAULT NULL, - `add_group_destination` varchar(256) DEFAULT NULL, - `add_group_expirience` smallint(6) DEFAULT NULL, - `add_group_interval` varchar(64) DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `id_UNIQUE` (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci'; - -/* Update from 0.5.9b -> 0.6b */ - -ALTER TABLE `{DATABASE}`.`{PREFIX}rewards` COLLATE 'utf8_general_ci'; \ No newline at end of file diff --git a/src/main/resources/sqlt/Update_server_info.sqlt b/src/main/resources/sqlt/Update_server_info.sqlt deleted file mode 100644 index 5a8c2b6..0000000 --- a/src/main/resources/sqlt/Update_server_info.sqlt +++ /dev/null @@ -1,27 +0,0 @@ -INSERT INTO `{DATABASE}`.`{PREFIX}servers` ( - `serverid`, - `plugin_version`, - `settings_default-group`, - `settings_treat-asterisk-as-op`, - `settings_auto-reload-delay-sec`, - `settings_maintenance-mode`, - `settings_enable-rewards`, - `internal_version` -) VALUES ( - '{SERVERID}', - 'v{PLUGIN_VER}', - '{DEFAULT}', - b'{OP}', - '{DELAY}', - {mMode}, - b'{USE_R}', - '{CFG_VER}' -) ON DUPLICATE KEY UPDATE - `serverid` = VALUES(`serverid`), - `plugin_version` = VALUES(`plugin_version`), - `settings_default-group` = VALUES(`settings_default-group`), - `settings_treat-asterisk-as-op` = VALUES(`settings_treat-asterisk-as-op`), - `settings_auto-reload-delay-sec` = VALUES(`settings_auto-reload-delay-sec`), - `settings_maintenance-mode` = VALUES(`settings_maintenance-mode`), - `settings_enable-rewards` = VALUES(`settings_enable-rewards`), - `internal_version` = VALUES(`internal_version`); \ No newline at end of file