Browse Source

Постепенно перевожу на активное использование нового кеша.

master
Stanislav 11 years ago
parent
commit
9d6e7a2e87
  1. 4
      src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java
  2. 7
      src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java
  3. 2
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java
  4. 19
      src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java
  5. 32
      src/main/java/ru/simsonic/rscPermissions/CommandHelper.java
  6. 6
      src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java
  7. 5
      src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java
  8. 1
      src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java
  9. 5
      src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheData.java
  10. 5
      src/main/java/ru/simsonic/rscPermissions/Ladders.java
  11. 16
      src/main/java/ru/simsonic/rscPermissions/MainPluginClass.java
  12. 8
      src/main/java/ru/simsonic/rscPermissions/MaintenanceMode.java
  13. 2
      src/main/java/ru/simsonic/rscPermissions/RegionUpdateObserver.java
  14. 780
      src/main/java/ru/simsonic/rscPermissions/rscpAPI.java

4
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.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowLadder; import ru.simsonic.rscPermissions.DataTypes.RowLadder;
import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.InternalCache.LocalCacheData; import ru.simsonic.rscPermissions.InternalCache.AbstractPermissionsCache;
public interface Backend public interface Backend
{ {
public abstract boolean canRead(); public abstract boolean canRead();
public abstract boolean canWrite(); public abstract boolean canWrite();
public abstract void fetchIntoCache(LocalCacheData cache); public abstract void fetchIntoCache(AbstractPermissionsCache cache);
public abstract RowEntity[] fetchEntities(); public abstract RowEntity[] fetchEntities();
public abstract RowPermission[] fetchPermissions(); public abstract RowPermission[] fetchPermissions();
public abstract RowInheritance[] fetchInheritance(); public abstract RowInheritance[] fetchInheritance();

7
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.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowLadder; import ru.simsonic.rscPermissions.DataTypes.RowLadder;
import ru.simsonic.rscPermissions.DataTypes.RowPermission; 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.MainPluginClass;
import ru.simsonic.rscPermissions.Settings; import ru.simsonic.rscPermissions.Settings;
import ru.simsonic.utilities.*; import ru.simsonic.utilities.ConnectionMySQL;
public class BackendMySQL extends ConnectionMySQL implements Backend public class BackendMySQL extends ConnectionMySQL implements Backend
{ {
@ -57,6 +57,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend
return false; return false;
if(super.Connect()) if(super.Connect())
{ {
executeUpdateT("Initialize_main_v1"); executeUpdateT("Initialize_main_v1");
cleanupTables(); cleanupTables();
return true; return true;
@ -82,7 +83,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend
executeUpdateT("Cleanup_tables"); executeUpdateT("Cleanup_tables");
} }
@Override @Override
public synchronized void fetchIntoCache(LocalCacheData cache) public synchronized void fetchIntoCache(AbstractPermissionsCache cache)
{ {
cleanupTables(); cleanupTables();
MainPluginClass.consoleLog.log(Level.INFO, MainPluginClass.consoleLog.log(Level.INFO,

2
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java

@ -1,5 +1,4 @@
package ru.simsonic.rscPermissions.Bukkit; package ru.simsonic.rscPermissions.Bukkit;
import ru.simsonic.rscPermissions.Settings;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
@ -9,6 +8,7 @@ import java.util.Map;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import ru.simsonic.rscPermissions.ConnectionHelper; import ru.simsonic.rscPermissions.ConnectionHelper;
import ru.simsonic.rscPermissions.MainPluginClass; import ru.simsonic.rscPermissions.MainPluginClass;
import ru.simsonic.rscPermissions.Settings;
public class BukkitPluginConfiguration implements Settings public class BukkitPluginConfiguration implements Settings
{ {

19
src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java

@ -1,6 +1,4 @@
package ru.simsonic.rscPermissions.Bukkit; package ru.simsonic.rscPermissions.Bukkit;
import java.util.HashMap;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; 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.PlayerLevelChangeEvent;
import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.permissions.PermissionAttachment;
import ru.simsonic.rscPermissions.MainPluginClass; import ru.simsonic.rscPermissions.MainPluginClass;
public class PlayerEventsListener implements Listener public class PlayerEventsListener implements Listener
@ -33,27 +30,17 @@ public class PlayerEventsListener implements Listener
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerLogin(PlayerLoginEvent event) public void onPlayerLogin(PlayerLoginEvent event)
{ {
final Player player = event.getPlayer(); rscp.cache2.resolvePlayer(event.getPlayer());
String name = event.getPlayer().getName();
final HashMap<String, Boolean> 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);
} }
@EventHandler @EventHandler
public void onPlayerExp(PlayerLevelChangeEvent event) public void onPlayerExp(PlayerLevelChangeEvent event)
{ {
rscp.cache.calculatePlayerPermissions(event.getPlayer()); rscp.cache2.resolvePlayer(event.getPlayer());
} }
@EventHandler @EventHandler
public void onPlayerLevel(PlayerExpChangeEvent event) public void onPlayerLevel(PlayerExpChangeEvent event)
{ {
rscp.cache.calculatePlayerPermissions(event.getPlayer()); rscp.cache2.resolvePlayer(event.getPlayer());
} }
@EventHandler @EventHandler
public void onPlayerKick(PlayerKickEvent event) public void onPlayerKick(PlayerKickEvent event)

32
src/main/java/ru/simsonic/rscPermissions/CommandHelper.java

@ -1,5 +1,4 @@
package ru.simsonic.rscPermissions; package ru.simsonic.rscPermissions;
import ru.simsonic.utilities.CommandAnswerException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Map; import java.util.Map;
@ -8,6 +7,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment; import org.bukkit.permissions.PermissionAttachment;
import ru.simsonic.rscPermissions.Importers.PermissionsEx_YAML; import ru.simsonic.rscPermissions.Importers.PermissionsEx_YAML;
import ru.simsonic.utilities.CommandAnswerException;
public class CommandHelper public class CommandHelper
{ {
@ -224,9 +224,11 @@ public class CommandHelper
throw new CommandAnswerException(list); throw new CommandAnswerException(list);
case "groups": case "groups":
list.add("{MAGENTA}Group list for {_YL}" + player.getName() + "{MAGENTA}:"); list.add("{MAGENTA}Group list for {_YL}" + player.getName() + "{MAGENTA}:");
/*
ArrayList<String> groups = plugin.cache.getUserGroups(player.getName()); ArrayList<String> groups = plugin.cache.getUserGroups(player.getName());
for(String group : groups) for(String group : groups)
list.add("{_LG}" + group); list.add("{_LG}" + group);
*/
throw new CommandAnswerException(list); throw new CommandAnswerException(list);
/* /*
case "ranks": case "ranks":
@ -238,22 +240,32 @@ public class CommandHelper
case "prefix": case "prefix":
if(args.length > 3) if(args.length > 3)
{ {
/*
plugin.API.setPlayerPrefix(null, player.getName(), args[3]); plugin.API.setPlayerPrefix(null, player.getName(), args[3]);
list.add("{MAGENTA}Prefix for user {_YL}" + player.getName() + list.add("{MAGENTA}Prefix for user {_YL}" + player.getName() +
" {MAGENTA}has been set to \"{_R}" + plugin.cache.userGetPrefix(player.getName()) + "{MAGENTA}\"."); " {MAGENTA}has been set to \"{_R}" + plugin.cache.userGetPrefix(player.getName()) + "{MAGENTA}\".");
} else */
} else {
/*
list.add("{MAGENTA}Prefix for user {_YL}" + player.getName() + list.add("{MAGENTA}Prefix for user {_YL}" + player.getName() +
" {MAGENTA}is \"{_R}" + plugin.cache.userGetPrefix(player.getName()) + "{MAGENTA}\"."); " {MAGENTA}is \"{_R}" + plugin.cache.userGetPrefix(player.getName()) + "{MAGENTA}\".");
*/
}
throw new CommandAnswerException(list); throw new CommandAnswerException(list);
case "suffix": case "suffix":
if(args.length > 3) if(args.length > 3)
{ {
/*
plugin.API.setPlayerSuffix(null, player.getName(), args[3]); plugin.API.setPlayerSuffix(null, player.getName(), args[3]);
list.add("{MAGENTA}Suffix for user {_YL}" + player.getName() + list.add("{MAGENTA}Suffix for user {_YL}" + player.getName() +
" {MAGENTA}has been set to \"{_R}" + plugin.cache.userGetSuffix(player.getName()) + "{MAGENTA}\"."); " {MAGENTA}has been set to \"{_R}" + plugin.cache.userGetSuffix(player.getName()) + "{MAGENTA}\".");
} else */
} else {
/*
list.add("{MAGENTA}Suffix for user {_YL}" + player.getName() + list.add("{MAGENTA}Suffix for user {_YL}" + player.getName() +
" {MAGENTA}is \"{_R}" + plugin.cache.userGetSuffix(player.getName()) + "{MAGENTA}\"."); " {MAGENTA}is \"{_R}" + plugin.cache.userGetSuffix(player.getName()) + "{MAGENTA}\".");
*/
}
throw new CommandAnswerException(list); throw new CommandAnswerException(list);
} }
} }
@ -279,22 +291,32 @@ public class CommandHelper
case "prefix": case "prefix":
if(args.length > 3) if(args.length > 3)
{ {
/*
plugin.API.setGroupPrefix(null, group, args[3]); plugin.API.setGroupPrefix(null, group, args[3]);
list.add("{MAGENTA}Prefix for group {_YL}" + group + list.add("{MAGENTA}Prefix for group {_YL}" + group +
" {MAGENTA}has been set to \"{_R}" + plugin.cache.groupGetPrefix(group) + "{MAGENTA}\"."); " {MAGENTA}has been set to \"{_R}" + plugin.cache.groupGetPrefix(group) + "{MAGENTA}\".");
} else */
} else {
/*
list.add("{MAGENTA}Prefix for group {_YL}" + group + list.add("{MAGENTA}Prefix for group {_YL}" + group +
" {MAGENTA}is \"{_R}" + plugin.cache.groupGetPrefix(group) + "{MAGENTA}\"."); " {MAGENTA}is \"{_R}" + plugin.cache.groupGetPrefix(group) + "{MAGENTA}\".");
*/
}
throw new CommandAnswerException(list); throw new CommandAnswerException(list);
case "suffix": case "suffix":
if(args.length > 3) if(args.length > 3)
{ {
/*
plugin.API.setGroupSuffix(null, group, args[3]); plugin.API.setGroupSuffix(null, group, args[3]);
list.add("{MAGENTA}Suffix for group {_YL}" + group + list.add("{MAGENTA}Suffix for group {_YL}" + group +
" {MAGENTA}has been set to \"{_R}" + plugin.cache.groupGetSuffix(group) + "{MAGENTA}\"."); " {MAGENTA}has been set to \"{_R}" + plugin.cache.groupGetSuffix(group) + "{MAGENTA}\".");
} else */
} else {
/*
list.add("{MAGENTA}Suffix for group {_YL}" + group + list.add("{MAGENTA}Suffix for group {_YL}" + group +
" {MAGENTA}is \"{_R}" + plugin.cache.groupGetSuffix(group) + "{MAGENTA}\"."); " {MAGENTA}is \"{_R}" + plugin.cache.groupGetSuffix(group) + "{MAGENTA}\".");
*/
}
throw new CommandAnswerException(list); throw new CommandAnswerException(list);
} }
} }

6
src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java

@ -1,9 +1,9 @@
package ru.simsonic.rscPermissions; package ru.simsonic.rscPermissions;
import ru.simsonic.utilities.ConnectionMySQL;
import java.util.logging.Level; import java.util.logging.Level;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import ru.simsonic.rscPermissions.Backends.BackendMySQL; import ru.simsonic.rscPermissions.Backends.BackendMySQL;
import ru.simsonic.utilities.ConnectionMySQL;
public class ConnectionHelper extends BackendMySQL public class ConnectionHelper extends BackendMySQL
{ {
@ -41,7 +41,7 @@ public class ConnectionHelper extends BackendMySQL
final ConnectionMySQL connection = findConnectedNode(); final ConnectionMySQL connection = findConnectedNode();
if(connection == null) if(connection == null)
return; return;
fetchIntoCache(plugin.cache); fetchIntoCache(plugin.cache2);
// Update permissions for online players // Update permissions for online players
try try
{ {
@ -62,7 +62,7 @@ public class ConnectionHelper extends BackendMySQL
} catch(InterruptedException ex) { } catch(InterruptedException ex) {
MainPluginClass.consoleLog.log(Level.SEVERE, "[rscp] Exception in FetchTables(): {0}", ex); MainPluginClass.consoleLog.log(Level.SEVERE, "[rscp] Exception in FetchTables(): {0}", ex);
} }
plugin.cache.calculateStartupPermissions(); // plugin.cache.calculateStartupPermissions();
} }
}; };
result.start(); result.start();

5
src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java

@ -1,6 +1,9 @@
package ru.simsonic.rscPermissions.Importers; package ru.simsonic.rscPermissions.Importers;
import java.util.ArrayList; 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 public abstract class BaseImporter
{ {

1
src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java

@ -1,6 +1,5 @@
package ru.simsonic.rscPermissions.InternalCache; package ru.simsonic.rscPermissions.InternalCache;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;

5
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.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import ru.simsonic.rscPermissions.DataTypes.*;
import ru.simsonic.rscPermissions.DataTypes.EntityType; 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; import ru.simsonic.rscPermissions.MainPluginClass;
public class LocalCacheData public class LocalCacheData

5
src/main/java/ru/simsonic/rscPermissions/Ladders.java

@ -64,7 +64,8 @@ public class Ladders
if(bUP == false) if(bUP == false)
return new String[] { "Player is not promotable on this ladder." }; 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<RowLadder> ladderArray = plugin.cache.buildLadderTemplate(template); final ArrayList<RowLadder> ladderArray = plugin.cache.buildLadderTemplate(template);
if(ladderArray.isEmpty()) if(ladderArray.isEmpty())
return new String[] { "There is no such ladder." }; 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}."; ) + " the ladder {_LG}" + position.ladder + ((instance != null) ? "{_DS}(" + instance + ")" : "") + "{GOLD}.";
plugin.formattedMessage(player, resultP); plugin.formattedMessage(player, resultP);
return new String [] { resultS }; return new String [] { resultS };
*/
return new String[] { "Function is temporary unavailable." };
} }
} }

16
src/main/java/ru/simsonic/rscPermissions/MainPluginClass.java

@ -1,6 +1,4 @@
package ru.simsonic.rscPermissions; package ru.simsonic.rscPermissions;
import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration;
import ru.simsonic.rscPermissions.InternalCache.LocalCacheFunctions;
import java.io.IOException; import java.io.IOException;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -10,6 +8,7 @@ import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.scheduler.BukkitScheduler;
import org.mcstats.MetricsLite; import org.mcstats.MetricsLite;
import ru.simsonic.rscPermissions.Bukkit.BukkitPermissions; import ru.simsonic.rscPermissions.Bukkit.BukkitPermissions;
import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration;
import ru.simsonic.rscPermissions.Bukkit.PlayerEventsListener; import ru.simsonic.rscPermissions.Bukkit.PlayerEventsListener;
import ru.simsonic.rscPermissions.InternalCache.BrandNewCache; import ru.simsonic.rscPermissions.InternalCache.BrandNewCache;
import ru.simsonic.utilities.CommandAnswerException; import ru.simsonic.utilities.CommandAnswerException;
@ -20,6 +19,7 @@ public final class MainPluginClass extends JavaPlugin
private static final String chatPrefix = "{_YL}[rscp] {GOLD}"; private static final String chatPrefix = "{_YL}[rscp] {GOLD}";
public static final Logger consoleLog = Logger.getLogger("Minecraft"); public static final Logger consoleLog = Logger.getLogger("Minecraft");
public final Settings settings = new BukkitPluginConfiguration(this); public final Settings settings = new BukkitPluginConfiguration(this);
private final BridgeForBukkitAPI api = new BridgeForBukkitAPI(this);
public final PlayerEventsListener listener = new PlayerEventsListener(this); public final PlayerEventsListener listener = new PlayerEventsListener(this);
public final BrandNewCache cache2 = new BrandNewCache(this); public final BrandNewCache cache2 = new BrandNewCache(this);
public final BukkitPermissions permissionManager = new BukkitPermissions(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); private final RegionUpdateObserver regionUpdateObserver = new RegionUpdateObserver(this);
public final CommandHelper commandHelper = new CommandHelper(this); public final CommandHelper commandHelper = new CommandHelper(this);
public final MaintenanceMode maintenance = new MaintenanceMode(this); public final MaintenanceMode maintenance = new MaintenanceMode(this);
public final LocalCacheFunctions cache = new LocalCacheFunctions(this);
public ConnectionHelper connectionList; public ConnectionHelper connectionList;
private MetricsLite metrics; private MetricsLite metrics;
// private final HashSet<String> verbosePlayers = new HashSet<>();
public final rscpAPI API = new rscpAPI(this);
private final BridgeForBukkitAPI api = new BridgeForBukkitAPI(this);
@Override @Override
public void onLoad() public void onLoad()
{ {
@ -57,7 +53,7 @@ public final class MainPluginClass extends JavaPlugin
// WorldGuard, Residence and other possible region list providers // WorldGuard, Residence and other possible region list providers
regionListProvider.integrate(); regionListProvider.integrate();
// Start all needed threads // Start all needed threads
cache.setDefaultGroup(settings.getDefaultGroup()); cache2.setDefaultGroup(settings.getDefaultGroup());
permissionManager.start(); permissionManager.start();
regionUpdateObserver.start(); regionUpdateObserver.start();
connectionList.threadFetchTablesData(); connectionList.threadFetchTablesData();
@ -81,7 +77,7 @@ public final class MainPluginClass extends JavaPlugin
getServer().getServicesManager().unregisterAll(this); getServer().getServicesManager().unregisterAll(this);
regionUpdateObserver.stop(); regionUpdateObserver.stop();
permissionManager.stop(); permissionManager.stop();
cache.clear(); // cache.clear();
connectionList.Disconnect(); connectionList.Disconnect();
connectionList = null; connectionList = null;
regionListProvider.deintegrate(); regionListProvider.deintegrate();
@ -131,5 +127,9 @@ public final class MainPluginClass extends JavaPlugin
System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic"); System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic");
System.out.println("http://dev.bukkit.org/bukkit-plugins/rscpermissions/"); System.out.println("http://dev.bukkit.org/bukkit-plugins/rscpermissions/");
// TEST SECTION STARTS BELOW // 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();
} }
} }

8
src/main/java/ru/simsonic/rscPermissions/MaintenanceMode.java

@ -42,16 +42,16 @@ public class MaintenanceMode implements Listener
try try
{ {
final String name = event.getName(); final String name = event.getName();
plugin.cache.calculateBasePermissions(name); plugin.cache2.resolvePlayer(name);
permissions.putAll(plugin.cache.mapPermissions.get(name)); // permissions.putAll(plugin.cache.mapPermissions.get(name));
} catch(RuntimeException ex) { } catch(RuntimeException ex) {
} }
try try
{ {
final UUID uuid = event.getUniqueId(); final UUID uuid = event.getUniqueId();
final String userFriendlyUniqueId = uuid.toString().replace("-", "").toLowerCase(); final String userFriendlyUniqueId = uuid.toString().replace("-", "").toLowerCase();
plugin.cache.calculateBasePermissions(uuid); plugin.cache2.resolvePlayer(userFriendlyUniqueId);
permissions.putAll(plugin.cache.mapPermissions.get(userFriendlyUniqueId)); // permissions.putAll(plugin.cache.mapPermissions.get(userFriendlyUniqueId));
} catch(RuntimeException | NoSuchMethodError ex) { } catch(RuntimeException | NoSuchMethodError ex) {
} }
for(String permission : permissions.keySet()) for(String permission : permissions.keySet())

2
src/main/java/ru/simsonic/rscPermissions/RegionUpdateObserver.java

@ -56,7 +56,7 @@ public class RegionUpdateObserver implements Runnable
for(; !Thread.interrupted(); Thread.sleep(granularity)) for(; !Thread.interrupted(); Thread.sleep(granularity))
for(Player player : movedPlayers.getMovedPlayersAsync()) for(Player player : movedPlayers.getMovedPlayersAsync())
if(rscp.regionListProvider.isRegionListChanged(player)) if(rscp.regionListProvider.isRegionListChanged(player))
rscp.cache.calculatePlayerPermissions(player); rscp.cache2.resolvePlayer(player);
} catch(InterruptedException ex) { } catch(InterruptedException ex) {
} }
} }

780
src/main/java/ru/simsonic/rscPermissions/rscpAPI.java

@ -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<String, Boolean> 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<String> 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<String> 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);
}
}
Loading…
Cancel
Save