Browse Source

Много плюшек.

master
Stanislav Usenkov 10 years ago
parent
commit
e85b046081
  1. 8
      pom.xml
  2. 12
      src/main/java/ru/simsonic/rscPermissions/API/PlayerType.java
  3. 2
      src/main/java/ru/simsonic/rscPermissions/API/Settings.java
  4. 6
      src/main/java/ru/simsonic/rscPermissions/API/TranslationProvider.java
  5. 8
      src/main/java/ru/simsonic/rscPermissions/Backends/BackendDatabase.java
  6. 15
      src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
  7. 28
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java
  8. 20
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java
  9. 28
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java
  10. 255
      src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java
  11. 89
      src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java
  12. 26
      src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
  13. 21
      src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java
  14. 4
      src/main/java/ru/simsonic/rscPermissions/Engine/Matchers.java
  15. 24
      src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java
  16. 1
      src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionParams.java
  17. 19
      src/main/java/ru/simsonic/rscPermissions/IndependentMain.java
  18. 8
      src/main/resources/languages/english.yml
  19. 8
      src/main/resources/languages/russian.yml

8
pom.xml

@ -4,7 +4,7 @@
<groupId>ru.simsonic</groupId>
<artifactId>rscPermissions</artifactId>
<version>0.9.3a</version>
<version>0.9.4a</version>
<packaging>jar</packaging>
<name>rscPermissions</name>
@ -16,15 +16,11 @@
<id>sponge-repo</id>
<url>http://repo.spongepowered.org/Sponge/maven/</url>
</repository>
<repository>
<id>bukkit-repo</id>
<url>http://repo.bukkit.org/content/groups/public/</url>
</repository>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
</repository>
<!-- MC Metrics -->
<!-- Metrics (mcstats.org) -->
<repository>
<id>metrics-repo</id>
<url>http://repo.mcstats.org/content/repositories/public/</url>

12
src/main/java/ru/simsonic/rscPermissions/API/PlayerType.java

@ -46,6 +46,7 @@ public enum PlayerType
return hyphenatedUUID;
if(dehyphenatedRegExp.matcher(entity.toLowerCase()).matches())
return dehyphenatedUUID;
/*
final Matcher mIP1 = ipWildcardRegExp.matcher(entity);
if(mIP1.matches())
{
@ -55,6 +56,7 @@ public enum PlayerType
final String a4 = mIP1.group(4);
// TO DO
long address = 0, mask = 0;
return internetWildcard;
}
final Matcher mIP2 = ipSubnetMaskRegExp.matcher(entity);
if(mIP2.matches())
@ -66,9 +68,12 @@ public enum PlayerType
final String sn = mIP1.group(5);
// TO DO
long address = 0, mask = 0;
return internetSubnetMask;
}
*/
return inapplicable;
}
/*
public static void getAddressDetails(String entity, RowPermission row)
{
final Matcher mIP1 = ipWildcardRegExp.matcher(entity);
@ -97,16 +102,19 @@ public enum PlayerType
long address = 0, mask = 0;
}
}
*/
public boolean isEntityApplicable(String entity, String identifier)
{
if(entity == null || "".equals(entity) || identifier == null || "".equals(identifier))
return false;
switch(this)
{
case name:
return identifier.equals(entity);
case hyphenatedUUID:
identifier = identifier.replace("-", "").toLowerCase();
identifier = identifier.replace("-", "");
case dehyphenatedUUID:
return entity.equals(identifier);
return entity.equalsIgnoreCase(identifier);
}
return false;
}

2
src/main/java/ru/simsonic/rscPermissions/API/Settings.java

@ -21,6 +21,6 @@ public interface Settings
public long getRegionFinderGranularity();
public int getAutoReloadDelayTicks();
public boolean isUseMetrics();
public String getLanguage();
public TranslationProvider getTranslationProvider();
public ConnectionParams getConnectionParams();
}

6
src/main/java/ru/simsonic/rscPermissions/API/TranslationProvider.java

@ -0,0 +1,6 @@
package ru.simsonic.rscPermissions.API;
public interface TranslationProvider
{
public String getString(String path);
}

8
src/main/java/ru/simsonic/rscPermissions/Backends/BackendDatabase.java

@ -28,14 +28,6 @@ public class BackendDatabase extends ConnectionMySQL
contents.entities = fetchEntities();
contents.permissions = fetchPermissions();
contents.inheritance = fetchInheritance();
logger.log(Level.INFO,
"[rscp] Fetched {0} entities, {1} permissions and {2} inheritances",
new Integer[]
{
contents.entities.length,
contents.permissions.length,
contents.inheritance.length,
});
return contents;
}
private RowEntity[] fetchEntities()

15
src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java

@ -1,4 +1,5 @@
package ru.simsonic.rscPermissions;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.ServicePriority;
import ru.simsonic.rscPermissions.Bukkit.VaultChat;
@ -14,7 +15,7 @@ public class BridgeForBukkitAPI
private final BukkitPluginMain rscp;
private final VaultPermission vaultPermission;
private final VaultChat vaultChat;
public BridgeForBukkitAPI(BukkitPluginMain plugin)
protected BridgeForBukkitAPI(BukkitPluginMain plugin)
{
BridgeForBukkitAPI.instance = BridgeForBukkitAPI.this;
this.rscp = plugin;
@ -41,6 +42,13 @@ public class BridgeForBukkitAPI
{
return rscp.isEnabled();
}
public Player findPlayer(String player)
{
for(Player online : rscp.getServer().getOnlinePlayers())
if(online.getName().equals(player))
return online;
return null;
}
protected void setupVault()
{
final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("Vault");
@ -54,7 +62,8 @@ public class BridgeForBukkitAPI
rscp.getServer().getServicesManager().register(
net.milkbowl.vault.permission.Permission.class, vaultPermission,
rscp, ServicePriority.Highest);
BukkitPluginMain.consoleLog.info("[rscp] Vault found and integrated.");
}
BukkitPluginMain.consoleLog.info("[rscp] Vault was found and integrated.");
} else
BukkitPluginMain.consoleLog.info("[rscp] Sorry, I cannot find Vault...");
}
}

28
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java

@ -5,6 +5,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment;
@ -21,11 +22,12 @@ public class BukkitPermissionManager extends RestartableThread
this.rscp = plugin;
}
private final LinkedBlockingQueue<Player> updateQueue = new LinkedBlockingQueue<>();
private final HashMap<Player, PermissionAttachment> attachments = new HashMap<>();
private final HashMap<Player, Map<String, Boolean>> persistentPermissions = new HashMap<>();
private final HashMap<Player, Map<String, Boolean>> transientPermissions = new HashMap<>();
private final HashMap<Player, String> prefixes = new HashMap<>();
private final HashMap<Player, String> suffixes = new HashMap<>();
private final Map<Player, PermissionAttachment> attachments = new HashMap<>();
private final Map<Player, Map<String, Boolean>> persistentPermissions = new HashMap<>();
private final Map<Player, Map<String, Boolean>> transientPermissions = new HashMap<>();
private final Map<Player, Set<String>> groups = new ConcurrentHashMap<>();
private final Map<Player, String> prefixes = new ConcurrentHashMap<>();
private final Map<Player, String> suffixes = new ConcurrentHashMap<>();
public void recalculateOnlinePlayers()
{
updateQueue.addAll(rscp.getServer().getOnlinePlayers());
@ -46,6 +48,21 @@ public class BukkitPermissionManager extends RestartableThread
return attachment.getPermissions();
return Collections.EMPTY_MAP;
}
public String getPlayerPrefix(Player player)
{
final String prefix = prefixes.get(player);
return prefix != null ? prefix : "";
}
public String getPlayerSuffix(Player player)
{
final String suffix = suffixes.get(player);
return suffix != null ? suffix : "";
}
public Set<String> getPlayerGroups(Player player)
{
final Set<String> result = groups.get(player);
return result != null ? result : Collections.EMPTY_SET;
}
public void removePlayer(Player player)
{
updateQueue.remove(player);
@ -65,6 +82,7 @@ public class BukkitPermissionManager extends RestartableThread
for(Player current = updateQueue.take(); current != null; current = updateQueue.take())
{
final ResolutionResult result = rscp.permissionManager.resolvePlayer(current);
groups.put(current, result.groups);
prefixes.put(current, result.prefix);
suffixes.put(current, result.suffix);
persistentPermissions.put(current, result.permissions);

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

@ -1,6 +1,9 @@
package ru.simsonic.rscPermissions.Bukkit;
import java.io.File;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscPermissions.API.TranslationProvider;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscUtilityLibrary.ConnectionMySQL.ConnectionParams;
@ -62,7 +65,7 @@ public class BukkitPluginConfiguration implements Settings
language = config.getString("settings.language", "english");
strDefaultGroup = config.getString("settings.default-group", "Default");
strMaintenanceMode = config.getString("settings.maintenance-mode", "");
bAlwaysInheritDefault = config.getBoolean("always-inherit-default-group", false);
bAlwaysInheritDefault = config.getBoolean("settings.always-inherit-default-group", false);
bTreatAsteriskAsOP = config.getBoolean("settings.treat-asterisk-as-op", true);
bUseMetrics = config.getBoolean("settings.use-metrics", true);
bUseWorldGuard = config.getBoolean("settings.integration.worldguard", true);
@ -78,7 +81,7 @@ public class BukkitPluginConfiguration implements Settings
@Override
public boolean isInMaintenance()
{
return ! "".equals(strMaintenanceMode);
return !"".equals(strMaintenanceMode);
}
@Override
public String getMaintenanceMode()
@ -128,9 +131,18 @@ public class BukkitPluginConfiguration implements Settings
return nRegionFinderGranularity;
}
@Override
public String getLanguage()
public TranslationProvider getTranslationProvider()
{
return language;
final File langFile = new File(plugin.getDataFolder(), language + ".yml");
final YamlConfiguration langConfig = YamlConfiguration.loadConfiguration(langFile);
return new TranslationProvider()
{
@Override
public String getString(String path)
{
return langConfig.getString(path, path);
}
};
}
@Override
public ConnectionParams getConnectionParams()

28
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java

@ -7,11 +7,13 @@ import java.util.logging.Level;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscPermissions.Backends.DatabaseContents;
import ru.simsonic.rscPermissions.Bukkit.PermissionsEx_YAML;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscUtilityLibrary.CommandProcessing.CommandAnswerException;
import ru.simsonic.rscUtilityLibrary.RestartableThread;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
public class BukkitCommands
{
@ -32,11 +34,12 @@ public class BukkitCommands
return;
}
final DatabaseContents contents = rscp.connection.retrieveContents();
rscp.connection.disconnect();
if(contents != null)
{
contents.normalize();
rscp.fileCache.cleanup();
rscp.fileCache.saveContents(contents);
rscp.localStorage.cleanup();
rscp.localStorage.saveContents(contents);
contents.filterServerId(rscp.getServer().getServerId());
rscp.internalCache.fill(contents);
final Runnable syncTask = new Runnable()
@ -44,6 +47,14 @@ public class BukkitCommands
@Override
public synchronized void run()
{
BukkitPluginMain.consoleLog.log(Level.INFO,
"[rscp] Fetched {0} entities, {1} permissions and {2} inheritances",
new Integer[]
{
contents.entities.length,
contents.permissions.length,
contents.inheritance.length,
});
rscp.permissionManager.recalculateOnlinePlayers();
notify();
}
@ -70,7 +81,7 @@ public class BukkitCommands
{
try
{
setName("rscp:MigrateFromPExSQL");
setName("rscp:MigrateFromPermissionsEx-SQL");
rscp.connection.executeUpdateT("Migrate_from_PermissionsEx");
threadFetchDatabaseContents.join();
rscp.getServer().getScheduler().runTask(rscp, new Runnable()
@ -78,8 +89,10 @@ public class BukkitCommands
@Override
public void run()
{
rscp.formattedMessage(sender, "Migration from PermissionsEx (MySQL backend) done!");
rscp.formattedMessage(sender, "Check the latest database row for new data.");
sender.sendMessage(GenericChatCodes.processStringStatic(Settings.chatPrefix
+ "Migration from PermissionsEx (MySQL backend) done!"));
sender.sendMessage(GenericChatCodes.processStringStatic(Settings.chatPrefix
+ "Check the latest database row for new data."));
}
});
} catch(InterruptedException ex) {
@ -283,11 +296,8 @@ public class BukkitCommands
throw new CommandAnswerException(list);
case "groups":
list.add("{MAGENTA}Group list for {_YL}" + player.getName() + "{MAGENTA}:");
/*
ArrayList<String> groups = plugin.cache.getUserGroups(player.getName());
for(String group : groups)
for(String group : rscp.permissionManager.getPlayerGroups(player))
list.add("{_LG}" + group);
*/
throw new CommandAnswerException(list);
/*
case "ranks":

255
src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java

@ -3,14 +3,17 @@ import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.entity.Player;
import ru.simsonic.rscPermissions.BridgeForBukkitAPI;
import ru.simsonic.rscPermissions.BukkitPluginMain;
public final class VaultChat extends net.milkbowl.vault.chat.Chat
{
private final BridgeForBukkitAPI bridge;
private final BukkitPluginMain rscp;
public VaultChat(BridgeForBukkitAPI bridge, net.milkbowl.vault.permission.Permission perms)
{
super(perms);
this.bridge = bridge;
this.rscp = (BukkitPluginMain)bridge.getPlugin();
}
@Override
public String getName()
@ -25,336 +28,338 @@ public final class VaultChat extends net.milkbowl.vault.chat.Chat
@Override
public String getPlayerPrefix(String world, String player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
final Player online = bridge.findPlayer(player);
return online != null ? rscp.permissionManager.getPlayerPrefix(online) : null;
}
@Override
public void setPlayerPrefix(String world, String player, String prefix)
public String getPlayerSuffix(String world, String player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
final Player online = bridge.findPlayer(player);
return online != null ? rscp.permissionManager.getPlayerSuffix(online) : null;
}
@Override
public String getPlayerSuffix(String world, String player)
public void setPlayerPrefix(String world, String player, String prefix)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerSuffix(String world, String player, String suffix)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getGroupPrefix(String world, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setGroupPrefix(String world, String group, String prefix)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getGroupSuffix(String world, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setGroupSuffix(String world, String group, String suffix)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public int getPlayerInfoInteger(String world, String player, String node, int defaultValue)
public String getPlayerPrefix(String world, OfflinePlayer player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerInfoInteger(String world, String player, String node, int value)
public String getPlayerPrefix(Player player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
return rscp.permissionManager.getPlayerPrefix(player);
}
@Override
public int getGroupInfoInteger(String world, String group, String node, int defaultValue)
public void setPlayerPrefix(String world, OfflinePlayer player, String prefix)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setGroupInfoInteger(String world, String group, String node, int value)
public void setPlayerPrefix(Player player, String prefix)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public double getPlayerInfoDouble(String world, String player, String node, double defaultValue)
public String getPlayerSuffix(String world, OfflinePlayer player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerInfoDouble(String world, String player, String node, double value)
public String getPlayerSuffix(Player player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
return rscp.permissionManager.getPlayerSuffix(player);
}
@Override
public double getGroupInfoDouble(String world, String group, String node, double defaultValue)
public void setPlayerSuffix(String world, OfflinePlayer player, String suffix)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setGroupInfoDouble(String world, String group, String node, double value)
public void setPlayerSuffix(Player player, String suffix)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean getPlayerInfoBoolean(String world, String player, String node, boolean defaultValue)
public String getGroupPrefix(World world, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerInfoBoolean(String world, String player, String node, boolean value)
public void setGroupPrefix(World world, String group, String prefix)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean getGroupInfoBoolean(String world, String group, String node, boolean defaultValue)
public String getGroupSuffix(World world, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setGroupInfoBoolean(String world, String group, String node, boolean value)
public void setGroupSuffix(World world, String group, String suffix)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getPlayerInfoString(String world, String player, String node, String defaultValue)
public boolean playerInGroup(String world, OfflinePlayer player, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerInfoString(String world, String player, String node, String value)
public boolean playerInGroup(Player player, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getGroupInfoString(String world, String group, String node, String defaultValue)
public String[] getPlayerGroups(String world, OfflinePlayer player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setGroupInfoString(String world, String group, String node, String value)
public String[] getPlayerGroups(Player player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getPlayerPrefix(String world, OfflinePlayer player)
public String getPrimaryGroup(String world, OfflinePlayer player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getPlayerPrefix(Player player)
public String getPrimaryGroup(Player player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerPrefix(String world, OfflinePlayer player, String prefix)
public String[] getGroups()
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerPrefix(Player player, String prefix)
public int getPlayerInfoInteger(String world, String player, String node, int defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getPlayerSuffix(String world, OfflinePlayer player)
public void setPlayerInfoInteger(String world, String player, String node, int value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getPlayerSuffix(Player player)
public int getGroupInfoInteger(String world, String group, String node, int defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerSuffix(String world, OfflinePlayer player, String suffix)
public void setGroupInfoInteger(String world, String group, String node, int value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerSuffix(Player player, String suffix)
public double getPlayerInfoDouble(String world, String player, String node, double defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getGroupPrefix(World world, String group)
public void setPlayerInfoDouble(String world, String player, String node, double value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setGroupPrefix(World world, String group, String prefix)
public double getGroupInfoDouble(String world, String group, String node, double defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getGroupSuffix(World world, String group)
public void setGroupInfoDouble(String world, String group, String node, double value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setGroupSuffix(World world, String group, String suffix)
public boolean getPlayerInfoBoolean(String world, String player, String node, boolean defaultValue)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerInfoBoolean(String world, String player, String node, boolean value)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean getGroupInfoBoolean(String world, String group, String node, boolean defaultValue)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setGroupInfoBoolean(String world, String group, String node, boolean value)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getPlayerInfoString(String world, String player, String node, String defaultValue)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerInfoString(String world, String player, String node, String value)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getGroupInfoString(String world, String group, String node, String defaultValue)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setGroupInfoString(String world, String group, String node, String value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public int getPlayerInfoInteger(String world, OfflinePlayer player, String node, int defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public int getPlayerInfoInteger(Player player, String node, int defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerInfoInteger(String world, OfflinePlayer player, String node, int value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerInfoInteger(Player player, String node, int value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public int getGroupInfoInteger(World world, String group, String node, int defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setGroupInfoInteger(World world, String group, String node, int value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public double getPlayerInfoDouble(String world, OfflinePlayer player, String node, double defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public double getPlayerInfoDouble(Player player, String node, double defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerInfoDouble(String world, OfflinePlayer player, String node, double value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerInfoDouble(Player player, String node, double value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public double getGroupInfoDouble(World world, String group, String node, double defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setGroupInfoDouble(World world, String group, String node, double value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean getPlayerInfoBoolean(String world, OfflinePlayer player, String node, boolean defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean getPlayerInfoBoolean(Player player, String node, boolean defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerInfoBoolean(String world, OfflinePlayer player, String node, boolean value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerInfoBoolean(Player player, String node, boolean value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean getGroupInfoBoolean(World world, String group, String node, boolean defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setGroupInfoBoolean(World world, String group, String node, boolean value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getPlayerInfoString(String world, OfflinePlayer player, String node, String defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getPlayerInfoString(Player player, String node, String defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerInfoString(String world, OfflinePlayer player, String node, String value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerInfoString(Player player, String node, String value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getGroupInfoString(World world, String group, String node, String defaultValue)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setGroupInfoString(World world, String group, String node, String value)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
}
@Override
public boolean playerInGroup(String world, OfflinePlayer player, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
}
@Override
public boolean playerInGroup(Player player, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
}
@Override
public String[] getPlayerGroups(String world, OfflinePlayer player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
}
@Override
public String[] getPlayerGroups(Player player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
}
@Override
public String getPrimaryGroup(String world, OfflinePlayer player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
}
@Override
public String getPrimaryGroup(Player player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
}
@Override
public String[] getGroups()
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
}

89
src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java

@ -4,13 +4,16 @@ import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import ru.simsonic.rscPermissions.BridgeForBukkitAPI;
import ru.simsonic.rscPermissions.BukkitPluginMain;
public class VaultPermission extends net.milkbowl.vault.permission.Permission
{
private final BridgeForBukkitAPI bridge;
private final BukkitPluginMain rscp;
public VaultPermission(BridgeForBukkitAPI bridge)
{
this.bridge = bridge;
this.rscp = (BukkitPluginMain)bridge.getPlugin();
}
@Override
public String getName()
@ -30,216 +33,216 @@ public class VaultPermission extends net.milkbowl.vault.permission.Permission
@Override
public boolean playerHas(String world, String player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAdd(String world, String player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemove(String world, String player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean groupHas(String world, String group, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean groupAdd(String world, String group, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean groupRemove(String world, String group, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerInGroup(String world, String player, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddGroup(String world, String player, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemoveGroup(String world, String player, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String[] getPlayerGroups(String world, String player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getPrimaryGroup(String world, String player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String[] getGroups()
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean hasGroupSupport()
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean has(CommandSender sender, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
return sender.hasPermission(permission);
}
@Override
public boolean has(Player player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
return player.hasPermission(permission);
}
@Override
public boolean playerHas(String world, OfflinePlayer player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerHas(Player player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAdd(String world, OfflinePlayer player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAdd(Player player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddTransient(OfflinePlayer player, String permission) throws UnsupportedOperationException
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddTransient(Player player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddTransient(String worldName, OfflinePlayer player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddTransient(String worldName, Player player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemoveTransient(String worldName, OfflinePlayer player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemoveTransient(String worldName, Player player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemove(String world, OfflinePlayer player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemove(World world, String player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemove(Player player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemoveTransient(OfflinePlayer player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemoveTransient(Player player, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean groupHas(World world, String group, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean groupAdd(World world, String group, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean groupRemove(World world, String group, String permission)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerInGroup(String world, OfflinePlayer player, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerInGroup(Player player, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddGroup(String world, OfflinePlayer player, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddGroup(Player player, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemoveGroup(String world, OfflinePlayer player, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemoveGroup(Player player, String group)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String[] getPlayerGroups(String world, OfflinePlayer player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String[] getPlayerGroups(Player player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getPrimaryGroup(String world, OfflinePlayer player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String getPrimaryGroup(Player player)
{
throw new UnsupportedOperationException("This method is still unsupported. Sorry.");
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
}

26
src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java

@ -19,16 +19,17 @@ import ru.simsonic.rscPermissions.Bukkit.BukkitRegionProviders;
import ru.simsonic.rscPermissions.Bukkit.Commands.BukkitCommands;
import ru.simsonic.rscPermissions.Bukkit.RegionUpdateObserver;
import ru.simsonic.rscPermissions.Engine.InternalCache;
import ru.simsonic.rscPermissions.Engine.Phrases;
import ru.simsonic.rscUtilityLibrary.CommandProcessing.CommandAnswerException;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
public final class BukkitPluginMain extends JavaPlugin
{
public static final Logger consoleLog = Bukkit.getLogger();
public final Settings settings = new BukkitPluginConfiguration(this);
public final BukkitPluginConfiguration settings = new BukkitPluginConfiguration(this);
public final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this);
public final BukkitEventListener bukkitListener = new BukkitEventListener(this);
public final BackendJson fileCache = new BackendJson(getDataFolder());
public final BackendJson localStorage = new BackendJson(getDataFolder());
public final BackendDatabase connection = new BackendDatabase(consoleLog);
public final InternalCache internalCache = new InternalCache();
public final BukkitPermissionManager permissionManager = new BukkitPermissionManager(this);
@ -46,12 +47,14 @@ public final class BukkitPluginMain extends JavaPlugin
@Override
public void onEnable()
{
Phrases.extractAll(this);
Phrases.extractAll(getDataFolder());
settings.readSettings();
internalCache.setDefaultGroup(settings.getDefaultGroup());
Phrases.fill(this, settings.getLanguage());
internalCache.setDefaultGroup(
settings.getDefaultGroup(),
settings.isDefaultForever());
Phrases.translate(settings.getTranslationProvider());
// Restore temporary cached data from json files
final DatabaseContents contents = fileCache.retrieveContents();
final DatabaseContents contents = localStorage.retrieveContents();
contents.filterServerId(getServer().getServerId()).filterLifetime();
internalCache.fill(contents);
consoleLog.log(Level.INFO,
@ -87,7 +90,7 @@ public final class BukkitPluginMain extends JavaPlugin
connection.initialize(settings.getConnectionParams());
commandHelper.threadFetchDatabaseContents.startDeamon();
// Done
consoleLog.info("[rscp] rscPermissions has been successfully enabled.");
consoleLog.info(Phrases.PLUGIN_ENABLED.toString());
}
@Override
public void onDisable()
@ -99,7 +102,7 @@ public final class BukkitPluginMain extends JavaPlugin
connection.disconnect();
regionListProvider.deintegrate();
metrics = null;
consoleLog.info("[rscp] rscPermissions has been disabled.");
consoleLog.info(Phrases.PLUGIN_DISABLED.toString());
}
private int nAutoUpdaterTaskId = -1;
public void scheduleAutoUpdate()
@ -131,11 +134,4 @@ public final class BukkitPluginMain extends JavaPlugin
}
return true;
}
public void formattedMessage(CommandSender sender, String message)
{
if(message == null || "".equals(message))
return;
message = GenericChatCodes.processStringStatic(Settings.chatPrefix + message);
sender.sendMessage(message);
}
}

21
src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java

@ -4,6 +4,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map.Entry;
import ru.simsonic.rscPermissions.API.EntityType;
@ -19,10 +20,12 @@ public class InternalCache
private final HashMap<String, RowEntity> entities_g = new HashMap<>();
private final HashMap<String, RowEntity> entities_u = new HashMap<>();
private final RowInheritance defaultInheritance = new RowInheritance();
public void setDefaultGroup(String defaultGroup)
private boolean alwaysInheritDefaultGroup = false;
public void setDefaultGroup(String defaultGroup, boolean alwaysInheritDefaultGroup)
{
defaultInheritance.parent = defaultGroup;
defaultInheritance.deriveInstance();
this.alwaysInheritDefaultGroup = alwaysInheritDefaultGroup;
}
public synchronized void fill(DatabaseContents contents)
{
@ -57,6 +60,7 @@ public class InternalCache
else
names_u.add(row.entity);
}
names_g.add(defaultInheritance.parent);
for(String name : names_g)
{
final String groupInternalName = name.toLowerCase();
@ -144,6 +148,8 @@ public class InternalCache
Collections.sort(inheritances);
entry.getValue().inheritance = inheritances.toArray(new RowInheritance[inheritances.size()]);
}
defaultInheritance.childType = EntityType.player;
defaultInheritance.entityParent = entities_g.get(defaultInheritance.parent.toLowerCase());
}
public synchronized ResolutionResult resolvePlayer(String player)
{
@ -160,9 +166,10 @@ public class InternalCache
{
final ArrayList<RowPermission> applicablePermissions = new ArrayList<>();
final ArrayList<RowInheritance> applicableInheritance = new ArrayList<>();
params.groupList = new HashSet<>();
params.groupList = new LinkedHashSet<>();
params.finalPerms = new HashMap<>();
params.instantiator = "";
params.depth = 0;
for(RowEntity row : entities_u.values())
for(String identifier : params.applicableIdentifiers)
if(row.playerType.isEntityApplicable(row.entity, identifier))
@ -175,6 +182,9 @@ public class InternalCache
}
final ArrayList<ResolutionResult> intermediateResults = new ArrayList<>();
Collections.sort(applicableInheritance);
// Mix into default inheritance
if(applicableInheritance.isEmpty() || alwaysInheritDefaultGroup)
applicableInheritance.add(0, defaultInheritance);
for(RowInheritance row : applicableInheritance)
{
params.instantiator = "";
@ -191,8 +201,8 @@ public class InternalCache
{
final RowEntity currentParent = params.parentEntity;
final String instantiator = params.instantiator;
params.groupList.add(currentParent.entity + ("".equals(instantiator) ? "" : Settings.separator + instantiator));
final ArrayList<ResolutionResult> intermediateResults = new ArrayList<>();
params.depth += 1;
for(RowInheritance row : params.parentEntity.inheritance)
if(isInheritanceApplicable(params, row))
{
@ -202,6 +212,11 @@ public class InternalCache
: instantiator;
intermediateResults.add(resolveParent(params));
}
params.depth -= 1;
params.groupList.add(
new String(new char[params.depth]).replace('\0', '*')
+ currentParent.entity
+ ("".equals(instantiator) ? "" : Settings.separator + instantiator));
// Prefixes and suffixes
params.parentEntity = currentParent;
params.instantiator = instantiator;

4
src/main/java/ru/simsonic/rscPermissions/Engine/Matchers.java

@ -11,11 +11,11 @@ public class Matchers
return multiobject.split(genericSplitter);
}
private static final Pattern patternUUID = Pattern.compile(
"<uuid>" + "(?:[a-f\\d]{8}(?:-[a-f\\d]{4}){3}-[a-f\\d]{12})" + "</uuid>");
"(?:[a-f\\d]{8}(?:-[a-f\\d]{4}){3}-[a-f\\d]{12})");
private static boolean isCorrectUUID(String entityName)
{
if(entityName == null)
return false;
return patternUUID.matcher("<uuid>" + entityName.toLowerCase() + "</uuid>").find();
return patternUUID.matcher(entityName).find();
}
}

24
src/main/java/ru/simsonic/rscPermissions/Phrases.java → src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java

@ -1,13 +1,12 @@
package ru.simsonic.rscPermissions;
package ru.simsonic.rscPermissions.Engine;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.util.logging.Level;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.Plugin;
import ru.simsonic.rscPermissions.API.TranslationProvider;
import ru.simsonic.rscPermissions.BukkitPluginMain;
public enum Phrases
{
@ -28,23 +27,21 @@ public enum Phrases
{
return phrase;
}
public static void fill(Plugin plugin, String langName)
public static void translate(TranslationProvider provider)
{
final File langFile = new File(plugin.getDataFolder(), langName + ".yml");
final YamlConfiguration langConfig = YamlConfiguration.loadConfiguration(langFile);
for(Phrases value : Phrases.values())
value.phrase = langConfig.getString(value.node, value.node);
value.phrase = provider.getString(value.node);
}
public static void extractAll(Plugin plugin)
public static void extractAll(File workingDir)
{
extract(plugin, "english");
extract(plugin, "russian");
extract(workingDir, "english");
extract(workingDir, "russian");
}
public static void extract(Plugin plugin, String langName)
public static void extract(File workingDir, String langName)
{
try
{
final File langFile = new File(plugin.getDataFolder(), langName + ".yml");
final File langFile = new File(workingDir, langName + ".yml");
if(!langFile.isFile())
{
final FileChannel fileChannel = new FileOutputStream(langFile).getChannel();
@ -52,7 +49,6 @@ public enum Phrases
fileChannel.transferFrom(Channels.newChannel(langStream), 0, Long.MAX_VALUE);
}
} catch(IOException ex) {
BukkitPluginMain.consoleLog.log(Level.WARNING, "Cannot extract language: {0}\n{1}", new Object[] { langName, ex });
}
}
}

1
src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionParams.java

@ -9,6 +9,7 @@ public class ResolutionParams
public String[] destRegions;
public String destWorld;
public int expirience;
protected transient int depth;
protected transient RowEntity parentEntity;
protected transient String instantiator;
protected transient Map<String, Boolean> finalPerms;

19
src/main/java/ru/simsonic/rscPermissions/IndependentMain.java

@ -1,5 +1,8 @@
package ru.simsonic.rscPermissions;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.logging.Logger;
import ru.simsonic.rscPermissions.Backends.BackendDatabase;
@ -41,14 +44,18 @@ public class IndependentMain
System.out.println("Permission database is empty, stopping.");
return;
}
intCache.setDefaultGroup("Moderators", true);
intCache.fill(contents);
final ResolutionResult result = intCache.resolvePlayer("rscpTester");
for(Map.Entry<String, Boolean> perm : result.permissions.entrySet())
System.out.println(perm.getKey() + " = " + perm.getValue());
if(result.prefix != null)
System.out.println("Prefix = " + result.prefix);
if(result.suffix != null)
System.out.println("Suffix = " + result.suffix);
// Sorted output
ArrayList<String> perms = new ArrayList<>(result.permissions.keySet());
Collections.sort(perms);
for(String key : perms)
System.out.println("Permission: " + key + " = " + result.permissions.get(key));
for(String group : result.groups)
System.out.println("Parent: " + group);
System.out.println("Prefix: " + result.prefix);
System.out.println("Suffix: " + result.suffix);
System.out.println("Done.");
}
}

8
src/main/resources/languages/english.yml

@ -1,7 +1,7 @@
generic:
enabled: ""
disabled: ""
reloaded: ""
enabled: "[rscp] rscPermissions has been successfully enabled."
disabled: "[rscp] rscPermissions has been disabled."
reloaded: "[rscp] rscPermissions has been reloaded."
metrics: "[rscp] Metrics enabled."
mysql:
fetched: ""
fetched: "[rscp] "

8
src/main/resources/languages/russian.yml

@ -1,7 +1,7 @@
generic:
enabled: ""
disabled: ""
reloaded: ""
enabled: "[rscp] Плагин успешно включён."
disabled: "[rscp] Плагин выключен."
reloaded: "[rscp] Плагин перезапущен."
metrics: "[rscp] Включён сбор метрики (mcstats.org)."
mysql:
fetched: ""
fetched: "[rscp] "

Loading…
Cancel
Save