diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java b/src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java index 00a06c2..0d07b87 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java +++ b/src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java @@ -3,14 +3,14 @@ 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.InternalCache.LocalCacheData; +import ru.simsonic.rscPermissions.InternalCache.AbstractPermissionsCache; public interface Backend { public abstract boolean canRead(); public abstract boolean canWrite(); - public abstract void fetchIntoCache(LocalCacheData cache); + public abstract void fetchIntoCache(AbstractPermissionsCache cache); public abstract RowEntity[] fetchEntities(); public abstract RowPermission[] fetchPermissions(); public abstract RowInheritance[] fetchInheritance(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java index cedcd34..06423f0 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java +++ b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java @@ -9,10 +9,10 @@ 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.InternalCache.LocalCacheData; +import ru.simsonic.rscPermissions.InternalCache.AbstractPermissionsCache; import ru.simsonic.rscPermissions.MainPluginClass; import ru.simsonic.rscPermissions.Settings; -import ru.simsonic.utilities.*; +import ru.simsonic.utilities.ConnectionMySQL; public class BackendMySQL extends ConnectionMySQL implements Backend { @@ -57,6 +57,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend return false; if(super.Connect()) { + executeUpdateT("Initialize_main_v1"); cleanupTables(); return true; @@ -82,7 +83,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend executeUpdateT("Cleanup_tables"); } @Override - public synchronized void fetchIntoCache(LocalCacheData cache) + public synchronized void fetchIntoCache(AbstractPermissionsCache cache) { cleanupTables(); MainPluginClass.consoleLog.log(Level.INFO, diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java index 112e414..8c23cac 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java @@ -1,5 +1,4 @@ package ru.simsonic.rscPermissions.Bukkit; -import ru.simsonic.rscPermissions.Settings; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -9,6 +8,7 @@ import java.util.Map; import org.bukkit.configuration.file.FileConfiguration; import ru.simsonic.rscPermissions.ConnectionHelper; import ru.simsonic.rscPermissions.MainPluginClass; +import ru.simsonic.rscPermissions.Settings; public class BukkitPluginConfiguration implements Settings { diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java index 9816a48..e47609f 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java @@ -1,6 +1,4 @@ package ru.simsonic.rscPermissions.Bukkit; -import java.util.HashMap; -import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -10,7 +8,6 @@ import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.permissions.PermissionAttachment; import ru.simsonic.rscPermissions.MainPluginClass; public class PlayerEventsListener implements Listener @@ -33,27 +30,17 @@ public class PlayerEventsListener implements Listener @EventHandler(priority = EventPriority.LOWEST) public void onPlayerLogin(PlayerLoginEvent event) { - final Player player = event.getPlayer(); - String name = event.getPlayer().getName(); - final HashMap pending = rscp.cache.mapPermissions.get(name); - if(pending != null) - { - final PermissionAttachment attachment = player.addAttachment(rscp); - for(String permission : pending.keySet()) - attachment.setPermission(permission, pending.get(permission)); - rscp.permissionManager.attachments.put(player, attachment); - } - rscp.cache.calculatePlayerPermissions(player); + rscp.cache2.resolvePlayer(event.getPlayer()); } @EventHandler public void onPlayerExp(PlayerLevelChangeEvent event) { - rscp.cache.calculatePlayerPermissions(event.getPlayer()); + rscp.cache2.resolvePlayer(event.getPlayer()); } @EventHandler public void onPlayerLevel(PlayerExpChangeEvent event) { - rscp.cache.calculatePlayerPermissions(event.getPlayer()); + rscp.cache2.resolvePlayer(event.getPlayer()); } @EventHandler public void onPlayerKick(PlayerKickEvent event) diff --git a/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java b/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java index 00009b3..055c1b9 100644 --- a/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java +++ b/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java @@ -1,5 +1,4 @@ package ru.simsonic.rscPermissions; -import ru.simsonic.utilities.CommandAnswerException; import java.util.ArrayList; import java.util.Collections; import java.util.Map; @@ -8,6 +7,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.permissions.PermissionAttachment; import ru.simsonic.rscPermissions.Importers.PermissionsEx_YAML; +import ru.simsonic.utilities.CommandAnswerException; public class CommandHelper { @@ -224,9 +224,11 @@ public class CommandHelper 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 CommandAnswerException(list); /* case "ranks": @@ -238,22 +240,32 @@ public class CommandHelper case "prefix": if(args.length > 3) { + /* plugin.API.setPlayerPrefix(null, player.getName(), args[3]); list.add("{MAGENTA}Prefix for user {_YL}" + player.getName() + " {MAGENTA}has been set to \"{_R}" + plugin.cache.userGetPrefix(player.getName()) + "{MAGENTA}\"."); - } else + */ + } else { + /* list.add("{MAGENTA}Prefix for user {_YL}" + player.getName() + " {MAGENTA}is \"{_R}" + plugin.cache.userGetPrefix(player.getName()) + "{MAGENTA}\"."); + */ + } throw new CommandAnswerException(list); case "suffix": if(args.length > 3) { + /* plugin.API.setPlayerSuffix(null, player.getName(), args[3]); list.add("{MAGENTA}Suffix for user {_YL}" + player.getName() + " {MAGENTA}has been set to \"{_R}" + plugin.cache.userGetSuffix(player.getName()) + "{MAGENTA}\"."); - } else + */ + } else { + /* list.add("{MAGENTA}Suffix for user {_YL}" + player.getName() + " {MAGENTA}is \"{_R}" + plugin.cache.userGetSuffix(player.getName()) + "{MAGENTA}\"."); + */ + } throw new CommandAnswerException(list); } } @@ -279,22 +291,32 @@ public class CommandHelper case "prefix": if(args.length > 3) { + /* plugin.API.setGroupPrefix(null, group, args[3]); list.add("{MAGENTA}Prefix for group {_YL}" + group + " {MAGENTA}has been set to \"{_R}" + plugin.cache.groupGetPrefix(group) + "{MAGENTA}\"."); - } else + */ + } else { + /* list.add("{MAGENTA}Prefix for group {_YL}" + group + " {MAGENTA}is \"{_R}" + plugin.cache.groupGetPrefix(group) + "{MAGENTA}\"."); + */ + } throw new CommandAnswerException(list); case "suffix": if(args.length > 3) { + /* plugin.API.setGroupSuffix(null, group, args[3]); list.add("{MAGENTA}Suffix for group {_YL}" + group + " {MAGENTA}has been set to \"{_R}" + plugin.cache.groupGetSuffix(group) + "{MAGENTA}\"."); - } else + */ + } else { + /* list.add("{MAGENTA}Suffix for group {_YL}" + group + " {MAGENTA}is \"{_R}" + plugin.cache.groupGetSuffix(group) + "{MAGENTA}\"."); + */ + } throw new CommandAnswerException(list); } } diff --git a/src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java b/src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java index fbfc721..a86a83a 100644 --- a/src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java +++ b/src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java @@ -1,9 +1,9 @@ package ru.simsonic.rscPermissions; -import ru.simsonic.utilities.ConnectionMySQL; import java.util.logging.Level; import org.bukkit.command.CommandSender; import org.bukkit.scheduler.BukkitRunnable; import ru.simsonic.rscPermissions.Backends.BackendMySQL; +import ru.simsonic.utilities.ConnectionMySQL; public class ConnectionHelper extends BackendMySQL { @@ -41,7 +41,7 @@ public class ConnectionHelper extends BackendMySQL final ConnectionMySQL connection = findConnectedNode(); if(connection == null) return; - fetchIntoCache(plugin.cache); + fetchIntoCache(plugin.cache2); // Update permissions for online players try { @@ -62,7 +62,7 @@ public class ConnectionHelper extends BackendMySQL } catch(InterruptedException ex) { MainPluginClass.consoleLog.log(Level.SEVERE, "[rscp] Exception in FetchTables(): {0}", ex); } - plugin.cache.calculateStartupPermissions(); + // plugin.cache.calculateStartupPermissions(); } }; result.start(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java b/src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java index 0eb4b0e..dfcfcc6 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java +++ b/src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java @@ -1,6 +1,9 @@ package ru.simsonic.rscPermissions.Importers; import java.util.ArrayList; -import ru.simsonic.rscPermissions.DataTypes.*; +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 abstract class BaseImporter { diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java index 0256fd8..26bac59 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java @@ -1,6 +1,5 @@ package ru.simsonic.rscPermissions.InternalCache; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheData.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheData.java index 44e78f2..92d28db 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheData.java +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheData.java @@ -2,8 +2,11 @@ package ru.simsonic.rscPermissions.InternalCache; import java.util.ArrayList; import java.util.HashMap; import java.util.concurrent.ConcurrentHashMap; -import ru.simsonic.rscPermissions.DataTypes.*; 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 LocalCacheData diff --git a/src/main/java/ru/simsonic/rscPermissions/Ladders.java b/src/main/java/ru/simsonic/rscPermissions/Ladders.java index 132a2b5..9855fd7 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Ladders.java +++ b/src/main/java/ru/simsonic/rscPermissions/Ladders.java @@ -64,7 +64,8 @@ public class Ladders if(bUP == false) return new String[] { "Player is not promotable on this ladder." }; } - int rank = plugin.cache.getUserRank(user, template, instance); + /* + int rank = plugin.cache2.getUserRank(user, template, instance); final ArrayList ladderArray = plugin.cache.buildLadderTemplate(template); if(ladderArray.isEmpty()) return new String[] { "There is no such ladder." }; @@ -116,5 +117,7 @@ public class Ladders ) + " the ladder {_LG}" + position.ladder + ((instance != null) ? "{_DS}(" + instance + ")" : "") + "{GOLD}."; plugin.formattedMessage(player, resultP); return new String [] { resultS }; + */ + return new String[] { "Function is temporary unavailable." }; } } diff --git a/src/main/java/ru/simsonic/rscPermissions/MainPluginClass.java b/src/main/java/ru/simsonic/rscPermissions/MainPluginClass.java index dc91794..83021c7 100644 --- a/src/main/java/ru/simsonic/rscPermissions/MainPluginClass.java +++ b/src/main/java/ru/simsonic/rscPermissions/MainPluginClass.java @@ -1,6 +1,4 @@ package ru.simsonic.rscPermissions; -import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration; -import ru.simsonic.rscPermissions.InternalCache.LocalCacheFunctions; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; @@ -10,6 +8,7 @@ import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitScheduler; import org.mcstats.MetricsLite; import ru.simsonic.rscPermissions.Bukkit.BukkitPermissions; +import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration; import ru.simsonic.rscPermissions.Bukkit.PlayerEventsListener; import ru.simsonic.rscPermissions.InternalCache.BrandNewCache; import ru.simsonic.utilities.CommandAnswerException; @@ -20,6 +19,7 @@ public final class MainPluginClass extends JavaPlugin private static final String chatPrefix = "{_YL}[rscp] {GOLD}"; public static final Logger consoleLog = Logger.getLogger("Minecraft"); public final Settings settings = new BukkitPluginConfiguration(this); + private final BridgeForBukkitAPI api = new BridgeForBukkitAPI(this); public final PlayerEventsListener listener = new PlayerEventsListener(this); public final BrandNewCache cache2 = new BrandNewCache(this); public final BukkitPermissions permissionManager = new BukkitPermissions(this); @@ -27,12 +27,8 @@ public final class MainPluginClass extends JavaPlugin private final RegionUpdateObserver regionUpdateObserver = new RegionUpdateObserver(this); public final CommandHelper commandHelper = new CommandHelper(this); public final MaintenanceMode maintenance = new MaintenanceMode(this); - public final LocalCacheFunctions cache = new LocalCacheFunctions(this); public ConnectionHelper connectionList; private MetricsLite metrics; - // private final HashSet verbosePlayers = new HashSet<>(); - public final rscpAPI API = new rscpAPI(this); - private final BridgeForBukkitAPI api = new BridgeForBukkitAPI(this); @Override public void onLoad() { @@ -57,7 +53,7 @@ public final class MainPluginClass extends JavaPlugin // WorldGuard, Residence and other possible region list providers regionListProvider.integrate(); // Start all needed threads - cache.setDefaultGroup(settings.getDefaultGroup()); + cache2.setDefaultGroup(settings.getDefaultGroup()); permissionManager.start(); regionUpdateObserver.start(); connectionList.threadFetchTablesData(); @@ -81,7 +77,7 @@ public final class MainPluginClass extends JavaPlugin getServer().getServicesManager().unregisterAll(this); regionUpdateObserver.stop(); permissionManager.stop(); - cache.clear(); + // cache.clear(); connectionList.Disconnect(); connectionList = null; regionListProvider.deintegrate(); @@ -131,5 +127,9 @@ public final class MainPluginClass extends JavaPlugin System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic"); System.out.println("http://dev.bukkit.org/bukkit-plugins/rscpermissions/"); // TEST SECTION STARTS BELOW + MainPluginClass mpc = new MainPluginClass(); + ConnectionHelper ch = new ConnectionHelper(mpc, null); + ch.Initialize("Test", "voxile.ru:3306/servers-shared", "server-primary", "zcHzCBFZtTv28JfG", "rscp_"); + ch.Connect(); } } diff --git a/src/main/java/ru/simsonic/rscPermissions/MaintenanceMode.java b/src/main/java/ru/simsonic/rscPermissions/MaintenanceMode.java index 7909f78..23babbf 100644 --- a/src/main/java/ru/simsonic/rscPermissions/MaintenanceMode.java +++ b/src/main/java/ru/simsonic/rscPermissions/MaintenanceMode.java @@ -42,16 +42,16 @@ public class MaintenanceMode implements Listener try { final String name = event.getName(); - plugin.cache.calculateBasePermissions(name); - permissions.putAll(plugin.cache.mapPermissions.get(name)); + plugin.cache2.resolvePlayer(name); + // permissions.putAll(plugin.cache.mapPermissions.get(name)); } catch(RuntimeException ex) { } try { final UUID uuid = event.getUniqueId(); final String userFriendlyUniqueId = uuid.toString().replace("-", "").toLowerCase(); - plugin.cache.calculateBasePermissions(uuid); - permissions.putAll(plugin.cache.mapPermissions.get(userFriendlyUniqueId)); + plugin.cache2.resolvePlayer(userFriendlyUniqueId); + // permissions.putAll(plugin.cache.mapPermissions.get(userFriendlyUniqueId)); } catch(RuntimeException | NoSuchMethodError ex) { } for(String permission : permissions.keySet()) diff --git a/src/main/java/ru/simsonic/rscPermissions/RegionUpdateObserver.java b/src/main/java/ru/simsonic/rscPermissions/RegionUpdateObserver.java index cf7a67e..935e83d 100644 --- a/src/main/java/ru/simsonic/rscPermissions/RegionUpdateObserver.java +++ b/src/main/java/ru/simsonic/rscPermissions/RegionUpdateObserver.java @@ -56,7 +56,7 @@ public class RegionUpdateObserver implements Runnable for(; !Thread.interrupted(); Thread.sleep(granularity)) for(Player player : movedPlayers.getMovedPlayersAsync()) if(rscp.regionListProvider.isRegionListChanged(player)) - rscp.cache.calculatePlayerPermissions(player); + rscp.cache2.resolvePlayer(player); } catch(InterruptedException ex) { } } diff --git a/src/main/java/ru/simsonic/rscPermissions/rscpAPI.java b/src/main/java/ru/simsonic/rscPermissions/rscpAPI.java deleted file mode 100644 index f5c002a..0000000 --- a/src/main/java/ru/simsonic/rscPermissions/rscpAPI.java +++ /dev/null @@ -1,780 +0,0 @@ -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 rscp; - protected rscpAPI(MainPluginClass plugin) - { - this.rscp = plugin; - } - /** - * Vault support method. - * Checks if method is enabled. - * - * @return Success or Failure - */ - public boolean isEnabled() - { - return rscp.isEnabled(); - } - /** - * Vault permission support method. - * 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 World name - * @param player Player name - * @return Players primary group - */ - public String getPrimaryGroup(String world, String player) - { - return rscp.settings.getDefaultGroup(); - } - /** - * Vault permission support method. - * 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. - * - * This method is known to return unexpected results depending on what permission system is being used. Different - * permission systems - * will store the player groups differently, It is HIGHLY suggested you test your code out first. - * - * @param world World name - * @param player Player name - * @param group Group name - * @return Success or Failure - */ - public boolean playerInGroup(String world, String player, String group) - { - // TO DO - return false; - } - /** - * Vault permission support method. - * 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 World name - * @param player Player name - * @param group Group name - * @return Success or Failure - */ - public boolean playerAddGroup(String world, String player, String group) - { - // TO DO - return false; - } - /** - * Vault permission support method. - * 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 name - * @param player Player name - * @param group Group name - * @return Success or Failure - */ - public boolean playerRemoveGroup(String world, String player, String group) - { - // TO DO - return false; - } - /** - * Vault permission support method. - * 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 World name - * @param player Player name - * @param permission Permission node - * @return Success or Failure - */ - public boolean playerHas(String world, String player, String permission) - { - Player onlinePlayer = rscp.getServer().getPlayerExact(player); - if(onlinePlayer != null) - return onlinePlayer.hasPermission(permission); - rscp.cache.calculateBasePermissions(player); - HashMap map = rscp.cache.mapPermissions.get(player); - if(map != null) - { - Boolean value = map.get(permission); - if(value != null) - return value; - } - return false; - } - /** - * Vault permission support method. - * 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 World name - * @param player Player name - * @param permission Permission node - * @return Success or Failure - */ - public boolean playerAdd(String world, String player, String permission) - { - // TO DO - return false; - } - /** - * Vault permission support method. - * Remove permission from a player. - * - * @param world World name - * @param player Name of Player - * @param permission Permission node - * @return Success or Failure - */ - public boolean playerRemove(String world, String player, String permission) - { - // TO DO - return false; - } - /** - * Vault permission support method. - * 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 name - * @param group Group name - * @param permission Permission node - * @return Success or Failure - */ - public boolean groupHas(String world, String group, String permission) - { - // TO DO - return false; - } - /** - * Vault permission support method. - * 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 name - * @param group Group name - * @param permission Permission node - * @return Success or Failure - */ - public boolean groupAdd(String world, String group, String permission) - { - // TO DO - return false; - } - /** - * Vault permission support method. - * 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 name - * @param group Group name - * @param permission Permission node - * @return Success or Failure - */ - public boolean groupRemove(String world, String group, String permission) - { - // TO DO - return false; - } - /** - * Vault permission support method. - * 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 World name - * @param player Player name - * @return Array of groups - */ - public String[] getPlayerGroups(String world, String player) - { - ArrayList list = rscp.cache.getUserGroups(player); - return list.toArray(new String[list.size()]); - } - /** - * Vault permission support method. - * Returns a list of all known groups - * - * @return an Array of String of all groups - */ - public String[] getGroups() - { - Set groups = rscp.cache.getAllPossibleGroups(); - return groups.toArray(new String[groups.size()]); - } - /** - * Vault chat support. - * Get player's prefix - * - * @param world World name - * @param player Player name - * @return Prefix - */ - public String getPlayerPrefix(String world, String player) - { - return rscp.cache.userGetPrefix(player); - } - /** - * Vault chat support. - * Get players prefix - * - * @param world World name - * @param player Player name - * @return Prefix - */ - public String getPlayerSuffix(String world, String player) - { - return rscp.cache.userGetSuffix(player); - } - /** - * Vault chat support. - * Get player's prefix - * - * @param world World name - * @param group Group name - * @return Prefix - */ - public String getGroupPrefix(String world, String group) - { - return rscp.cache.groupGetPrefix(group); - } - /** - * Vault chat support. - * Get players prefix - * - * @param world World name - * @param group Group name - * @return Prefix - */ - public String getGroupSuffix(String world, String group) - { - return rscp.cache.groupGetSuffix(group); - } - /** - * Vault chat support. - * Set player's prefix - * - * @param world World name - * @param player Player name - * @param prefix Prefix - */ - public void setPlayerPrefix(String world, final String player, final String prefix) - { - new Thread() - { - @Override - public void run() - { - rscp.connectionList.updateEntityText(player, true, prefix, true); - } - }.start(); - } - /** - * Vault chat support. - * Set player's prefix - * - * @param world World name - * @param player Player name - * @param suffix Suffix - */ - public void setPlayerSuffix(String world, final String player, final String suffix) - { - new Thread() - { - @Override - public void run() - { - rscp.connectionList.updateEntityText(player, true, suffix, false); - } - }.start(); - } - /** - * Vault chat support. - * Set group prefix - * - * @param world World name - * @param group Group name - * @param prefix Prefix - */ - public void setGroupPrefix(String world, final String group, final String prefix) - { - new Thread() - { - @Override - public void run() - { - rscp.connectionList.updateEntityText(group, false, prefix, true); - } - }.start(); - } - /** - * Vault chat support. - * Set group prefix - * - * @param world World name - * @param group Group name - * @param suffix Suffix - */ - public void setGroupSuffix(String world, final String group, final String suffix) - { - new Thread() - { - @Override - public void run() - { - 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