diff --git a/nb-configuration.xml b/nb-configuration.xml
index 7d2a96a..e8aab4f 100644
--- a/nb-configuration.xml
+++ b/nb-configuration.xml
@@ -13,6 +13,6 @@ You can copy and paste the single properties, into the pom.xml file and the IDE
That way multiple projects can share the same settings (useful for formatting rules for example).
Any value defined here will override the pom.xml file value but is only applicable to the current project.
-->
- ______JDK_1.7_Update_67
+ ______JDK_1.7_Update_72
diff --git a/nbactions.xml b/nbactions.xml
index 9177298..b15d146 100644
--- a/nbactions.xml
+++ b/nbactions.xml
@@ -10,7 +10,7 @@
org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
- -classpath %classpath ru.simsonic.rscPermissions.MainPluginClass
+ -classpath %classpath ru.simsonic.rscPermissions.IndependentMain
java
@@ -24,7 +24,7 @@
org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
- -Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath ru.simsonic.rscPermissions.MainPluginClass
+ -Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath ru.simsonic.rscPermissions.IndependentMain
java
true
@@ -39,7 +39,7 @@
org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
- -classpath %classpath ru.simsonic.rscPermissions.MainPluginClass
+ -classpath %classpath ru.simsonic.rscPermissions.IndependentMain
java
diff --git a/pom.xml b/pom.xml
index 3785dba..03adc2d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
ru.simsonic
rscPermissions
- 0.9.2a
+ 0.9.3a
jar
rscPermissions
@@ -142,6 +142,9 @@
false
+
+ ${project.groupId}.${project.artifactId}.IndependentMain
+
.*
diff --git a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java b/src/main/java/ru/simsonic/rscPermissions/API/BridgeForBukkitAPI.java
similarity index 76%
rename from src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
rename to src/main/java/ru/simsonic/rscPermissions/API/BridgeForBukkitAPI.java
index 510af52..9a0e7a2 100644
--- a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
+++ b/src/main/java/ru/simsonic/rscPermissions/API/BridgeForBukkitAPI.java
@@ -1,6 +1,7 @@
-package ru.simsonic.rscPermissions;
+package ru.simsonic.rscPermissions.API;
import ru.simsonic.rscPermissions.Bukkit.VaultChat;
import ru.simsonic.rscPermissions.Bukkit.VaultPermission;
+import ru.simsonic.rscPermissions.BukkitPluginMain;
public class BridgeForBukkitAPI
{
@@ -12,12 +13,12 @@ public class BridgeForBukkitAPI
private final BukkitPluginMain rscp;
private final VaultPermission vaultPermission;
private final VaultChat vaultChat;
- protected BridgeForBukkitAPI(BukkitPluginMain plugin)
+ public BridgeForBukkitAPI(BukkitPluginMain plugin)
{
BridgeForBukkitAPI.instance = BridgeForBukkitAPI.this;
this.rscp = plugin;
this.vaultPermission = new VaultPermission(this);
- this.vaultChat = new VaultChat(this, vaultPermission);
+ this.vaultChat = new VaultChat(this, vaultPermission);
}
public org.bukkit.plugin.java.JavaPlugin getPlugin()
{
diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java b/src/main/java/ru/simsonic/rscPermissions/API/Destination.java
similarity index 63%
rename from src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java
rename to src/main/java/ru/simsonic/rscPermissions/API/Destination.java
index 9121573..9b1c3ff 100644
--- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java
+++ b/src/main/java/ru/simsonic/rscPermissions/API/Destination.java
@@ -1,11 +1,7 @@
-package ru.simsonic.rscPermissions.DataTypes;
-import java.util.ArrayList;
+package ru.simsonic.rscPermissions.API;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.bukkit.Location;
-import org.bukkit.World;
-import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
public class Destination
@@ -29,28 +25,6 @@ public class Destination
{
return wildcardTest(serverId, this.serverId);
}
- public boolean isLocationApplicable(Location location, Set regions, String instantiator)
- {
- if(location != null)
- {
- if(location.getWorld() != null)
- if(isWorldApplicable(location.getWorld(), instantiator))
- return isRegionApplicable(regions, instantiator);
- } else {
- if(this.world == null)
- return isRegionApplicable(regions, instantiator);
- }
- return false;
- }
- public boolean isWorldApplicable(World world, String instantiator)
- {
- if(this.world == null || this.world.isEmpty() || "*".equals(this.world))
- return true;
- final String instantiated = (instantiator != null && !instantiator.isEmpty())
- ? this.world.replace(Settings.instantiator, instantiator)
- : this.world;
- return wildcardTest(world.getName(), instantiated);
- }
public boolean isWorldApplicable(String world, String instantiator)
{
if(this.world == null || this.world.isEmpty() || "*".equals(this.world))
@@ -94,21 +68,9 @@ public class Destination
"" + testing.toLowerCase() + "",
"" + pattern.toLowerCase() + "");
}
- private static final String destinationSplitter = "\\s*[;,\\r\\n]+\\s*";
- public static Destination[] parseDestinations(String destinations)
- {
- if(destinations == null || destinations.isEmpty())
- return new Destination[] { new Destination() };
- final String[] destinationsList = destinations.split(destinationSplitter);
- final ArrayList result = new ArrayList(destinationsList.length);
- for(String inList : destinationsList)
- if(inList != null && !inList.isEmpty())
- result.add(parseDestination(inList));
- return result.toArray(new Destination[result.size()]);
- }
private static final Pattern destinationPattern = Pattern.compile(
- "^(?:((?:\\w|\\*|\\?)*):)?((?:\\w|\\*|\\?)*)?(?:@((?:\\w|\\*|\\?)*))?$");
- private static Destination parseDestination(String destination)
+ "(?:((?:\\w|\\*|\\?)*):)?((?:\\w|\\*|\\?)*)?(?:@((?:\\w|\\*|\\?)*))?");
+ public static Destination parseDestination(String destination)
{
final Matcher match = destinationPattern.matcher(destination);
if(match.find())
diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java b/src/main/java/ru/simsonic/rscPermissions/API/EntityType.java
similarity index 87%
rename from src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java
rename to src/main/java/ru/simsonic/rscPermissions/API/EntityType.java
index a88a320..89600a1 100644
--- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java
+++ b/src/main/java/ru/simsonic/rscPermissions/API/EntityType.java
@@ -1,4 +1,4 @@
-package ru.simsonic.rscPermissions.DataTypes;
+package ru.simsonic.rscPermissions.API;
public enum EntityType
{
diff --git a/src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java b/src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java
new file mode 100644
index 0000000..aa80ce3
--- /dev/null
+++ b/src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java
@@ -0,0 +1,17 @@
+package ru.simsonic.rscPermissions.API;
+import java.sql.Timestamp;
+
+public class RowEntity implements Cloneable
+{
+ public int id;
+ public String entity;
+ public EntityType entityType;
+ public String prefix;
+ public String suffix;
+ public Timestamp lifetime;
+ @Override
+ public RowEntity clone() throws CloneNotSupportedException
+ {
+ return (RowEntity)super.clone();
+ }
+}
diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java
similarity index 55%
rename from src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java
rename to src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java
index 1e9e770..66a27bb 100644
--- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java
+++ b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java
@@ -1,19 +1,20 @@
-package ru.simsonic.rscPermissions.DataTypes;
+package ru.simsonic.rscPermissions.API;
import java.sql.Timestamp;
import java.util.Arrays;
-import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
-public class RowInheritance extends AbstractRow implements Comparable
+public class RowInheritance implements Cloneable, Comparable
{
- public String entity;
- public String parent;
- public String instance;
- public EntityType childType;
- public int priority;
+ public int id;
+ public String entity;
+ public String parent;
+ public String instance;
+ public EntityType childType;
+ public int priority;
public Destination destination;
- public int expirience;
- public Timestamp lifetime;
+ public int expirience;
+ public Timestamp lifetime;
+ public transient String destinationSource;
public void deriveInstance()
{
if(parent != null)
@@ -29,6 +30,11 @@ public class RowInheritance extends AbstractRow implements Comparable result = new ArrayList<>();
final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}permissions`;");
- final String serverId = rscp.getServer().getServerId();
try
{
while(rs.next())
{
- for(Destination destination : Destination.parseDestinations(rs.getString("destination")))
- {
- if(destination.isServerIdApplicable(serverId) == false)
- continue;
- RowPermission row = new RowPermission();
- row.id = rs.getInt("id");
- row.entity = rs.getString("entity");
- row.entityType = EntityType.byValue(rs.getInt("entity_type"));
- row.permission = rs.getString("permission");
- row.value = rs.getBoolean("value");
- row.destination = destination;
- row.expirience = rs.getInt("expirience");
- row.lifetime = rs.getTimestamp("lifetime");
- result.add(row);
- }
+ RowPermission row = new RowPermission();
+ row.id = rs.getInt("id");
+ row.entity = rs.getString("entity");
+ row.entityType = EntityType.byValue(rs.getInt("entity_type"));
+ row.permission = rs.getString("permission");
+ row.value = rs.getBoolean("value");
+ row.destinationSource = rs.getString("destination");
+ row.expirience = rs.getInt("expirience");
+ row.lifetime = rs.getTimestamp("lifetime");
+ result.add(row);
}
rs.close();
} catch(SQLException ex) {
- BukkitPluginMain.consoleLog.log(Level.WARNING, "[rscp] Exception in rs2p(): {0}", ex);
+ logger.log(Level.WARNING, "[rscp] Exception in rs2p(): {0}", ex);
}
return result.toArray(new RowPermission[result.size()]);
}
@@ -102,31 +94,24 @@ public class BackendDatabase extends ConnectionMySQL
{
final ArrayList result = new ArrayList<>();
final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}inheritance`;");
- final String serverId = rscp.getServer().getServerId();
try
{
while(rs.next())
{
- for(Destination destination : Destination.parseDestinations(rs.getString("destination")))
- {
- if(destination.isServerIdApplicable(serverId) == false)
- continue;
- RowInheritance row = new RowInheritance();
- row.id = rs.getInt("id");
- row.entity = rs.getString("entity");
- row.parent = rs.getString("parent");
- row.deriveInstance();
- row.childType = EntityType.byValue(rs.getInt("inheritance_type"));
- row.priority = rs.getInt("inheritance_priority");
- row.destination = destination;
- row.expirience = rs.getInt("expirience");
- row.lifetime = rs.getTimestamp("lifetime");
- result.add(row);
- }
+ RowInheritance row = new RowInheritance();
+ row.id = rs.getInt("id");
+ row.entity = rs.getString("entity");
+ row.parent = rs.getString("parent");
+ row.childType = EntityType.byValue(rs.getInt("inheritance_type"));
+ row.priority = rs.getInt("inheritance_priority");
+ row.destinationSource = rs.getString("destination");
+ row.expirience = rs.getInt("expirience");
+ row.lifetime = rs.getTimestamp("lifetime");
+ result.add(row);
}
rs.close();
} catch(SQLException ex) {
- BukkitPluginMain.consoleLog.log(Level.WARNING, "[rscp] Exception in rs2i(): {0}", ex);
+ logger.log(Level.WARNING, "[rscp] Exception in rs2i(): {0}", ex);
}
return result.toArray(new RowInheritance[result.size()]);
}
diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java
index 783a359..37d74c2 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java
@@ -9,10 +9,9 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
-import ru.simsonic.rscPermissions.DataTypes.DatabaseContents;
-import ru.simsonic.rscPermissions.DataTypes.RowEntity;
-import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
-import ru.simsonic.rscPermissions.DataTypes.RowPermission;
+import ru.simsonic.rscPermissions.API.RowEntity;
+import ru.simsonic.rscPermissions.API.RowInheritance;
+import ru.simsonic.rscPermissions.API.RowPermission;
public class BackendJson
{
@@ -85,4 +84,10 @@ public class BackendJson
} catch(IOException ex) {
}
}
+ public synchronized void cleanup()
+ {
+ new File(workingDir, entitiesFile).delete();
+ new File(workingDir, permissionsFile).delete();
+ new File(workingDir, inheritanceFile).delete();
+ }
}
diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/DatabaseContents.java b/src/main/java/ru/simsonic/rscPermissions/Backends/DatabaseContents.java
new file mode 100644
index 0000000..d87e997
--- /dev/null
+++ b/src/main/java/ru/simsonic/rscPermissions/Backends/DatabaseContents.java
@@ -0,0 +1,87 @@
+package ru.simsonic.rscPermissions.Backends;
+import java.util.ArrayList;
+import ru.simsonic.rscPermissions.API.Destination;
+import ru.simsonic.rscPermissions.API.RowEntity;
+import ru.simsonic.rscPermissions.API.RowInheritance;
+import ru.simsonic.rscPermissions.API.RowPermission;
+import ru.simsonic.rscPermissions.InternalCache.Matchers;
+
+public class DatabaseContents
+{
+ public RowEntity entities[];
+ public RowPermission permissions[];
+ public RowInheritance inheritance[];
+ public void normalize()
+ {
+ if(entities == null)
+ entities = new RowEntity[] {};
+ if(permissions == null)
+ permissions = new RowPermission[] {};
+ if(inheritance == null)
+ inheritance = new RowInheritance[] {};
+ final ArrayList le = new ArrayList<>();
+ final ArrayList lp = new ArrayList<>();
+ final ArrayList li = new ArrayList<>();
+ try
+ {
+ // Entities
+ for(RowEntity row : entities)
+ {
+ final String[] splittedByEntity = Matchers.genericParse(row.entity);
+ for(String oneEntity : splittedByEntity)
+ {
+ final RowEntity clone = row.clone();
+ clone.entity = oneEntity;
+ le.add(clone);
+ }
+ }
+ // Permissions
+ for(RowPermission row : permissions)
+ {
+ final String[] splittedByEntity = Matchers.genericParse(row.entity);
+ final String[] splittedByPermission = Matchers.genericParse(row.permission);
+ final String[] splittedByDestination = Matchers.genericParse(row.destinationSource);
+ row.destinationSource = null;
+ for(String oneDestination : splittedByDestination)
+ {
+ final Destination destination = Destination.parseDestination(oneDestination);
+ for(String permission : splittedByPermission)
+ for(String entity : splittedByEntity)
+ {
+ final RowPermission clone = row.clone();
+ clone.entity = entity;
+ clone.permission = permission;
+ clone.destination = destination;
+ lp.add(clone);
+ }
+ }
+ }
+ // Inheritance
+ for(RowInheritance row : inheritance)
+ {
+ final String[] splittedByEntity = Matchers.genericParse(row.entity);
+ final String[] splittedByParent = Matchers.genericParse(row.parent);
+ final String[] splittedByDestination = Matchers.genericParse(row.destinationSource);
+ row.destinationSource = null;
+ for(String oneDestination : splittedByDestination)
+ {
+ final Destination destination = Destination.parseDestination(oneDestination);
+ for(String parent : splittedByParent)
+ for(String entity : splittedByEntity)
+ {
+ final RowInheritance clone = row.clone();
+ clone.entity = entity;
+ clone.parent = parent;
+ clone.deriveInstance();
+ clone.destination = destination;
+ li.add(clone);
+ }
+ }
+ }
+ } catch(CloneNotSupportedException ex) {
+ }
+ entities = le.toArray(new RowEntity[le.size()]);
+ permissions = lp.toArray(new RowPermission[lp.size()]);
+ inheritance = li.toArray(new RowInheritance[li.size()]);
+ }
+}
diff --git a/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java
similarity index 95%
rename from src/main/java/ru/simsonic/rscPermissions/CommandHelper.java
rename to src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java
index bf08d08..c276c08 100644
--- a/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java
@@ -1,4 +1,4 @@
-package ru.simsonic.rscPermissions;
+package ru.simsonic.rscPermissions.Bukkit;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
@@ -7,15 +7,16 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment;
-import ru.simsonic.rscPermissions.DataTypes.DatabaseContents;
+import ru.simsonic.rscPermissions.BukkitPluginMain;
+import ru.simsonic.rscPermissions.Backends.DatabaseContents;
import ru.simsonic.rscPermissions.Importers.PermissionsEx_YAML;
import ru.simsonic.rscUtilityLibrary.CommandProcessing.CommandAnswerException;
import ru.simsonic.rscUtilityLibrary.RestartableThread;
-public class CommandHelper
+public class BukkitCommands
{
private final BukkitPluginMain rscp;
- public CommandHelper(final BukkitPluginMain rscp)
+ public BukkitCommands(final BukkitPluginMain rscp)
{
this.rscp = rscp;
}
diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java
index a34d58b..3c4533e 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java
@@ -43,7 +43,7 @@ public class BukkitMaintenance implements Listener
try
{
final String name = event.getName();
- plugin.internalCache.resolvePlayer(name);
+ plugin.internalCache.resolvePlayer(name, plugin.getServer().getServerId());
// permissions.putAll(plugin.cache.mapPermissions.get(name));
} catch(RuntimeException ex) {
}
@@ -51,7 +51,7 @@ public class BukkitMaintenance implements Listener
{
final UUID uuid = event.getUniqueId();
final String userFriendlyUniqueId = uuid.toString().replace("-", "").toLowerCase();
- plugin.internalCache.resolvePlayer(userFriendlyUniqueId);
+ plugin.internalCache.resolvePlayer(userFriendlyUniqueId, plugin.getServer().getServerId());
// permissions.putAll(plugin.cache.mapPermissions.get(userFriendlyUniqueId));
} catch(RuntimeException | NoSuchMethodError ex) {
}
diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java
index f431b0e..2c0c411 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java
@@ -5,7 +5,7 @@ import java.util.Set;
import java.util.concurrent.LinkedBlockingQueue;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment;
-import ru.simsonic.rscPermissions.DataTypes.RowPermission;
+import ru.simsonic.rscPermissions.API.RowPermission;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.InternalCache.ResolutionParams;
import ru.simsonic.rscPermissions.InternalCache.ResolutionResult;
diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java
index 164ec00..94be934 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java
@@ -25,7 +25,7 @@ public class PlayerEventsListener implements Listener
event.getName(),
event.getUniqueId().toString(),
event.getAddress().getHostAddress(),
- });
+ }, rscp.getServer().getServerId());
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerLogin(PlayerLoginEvent event)
diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java
index de108b0..319a7d8 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java
@@ -3,7 +3,7 @@ import net.milkbowl.vault.permission.Permission;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.entity.Player;
-import ru.simsonic.rscPermissions.BridgeForBukkitAPI;
+import ru.simsonic.rscPermissions.API.BridgeForBukkitAPI;
public final class VaultChat extends net.milkbowl.vault.chat.Chat
{
diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java
index 86beb7b..70ec805 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java
@@ -3,7 +3,7 @@ import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
-import ru.simsonic.rscPermissions.BridgeForBukkitAPI;
+import ru.simsonic.rscPermissions.API.BridgeForBukkitAPI;
public class VaultPermission extends net.milkbowl.vault.permission.Permission
{
diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
index cb49ef2..aa751f9 100644
--- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
+++ b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
@@ -1,4 +1,6 @@
package ru.simsonic.rscPermissions;
+import ru.simsonic.rscPermissions.API.BridgeForBukkitAPI;
+import ru.simsonic.rscPermissions.Bukkit.BukkitCommands;
import ru.simsonic.rscPermissions.Bukkit.BukkitRegionProviders;
import ru.simsonic.rscPermissions.Bukkit.RegionUpdateObserver;
import ru.simsonic.rscPermissions.Bukkit.BukkitMaintenance;
@@ -26,15 +28,15 @@ public final class BukkitPluginMain extends JavaPlugin
private static final String chatPrefix = "{YELLOW}[rscp] {GOLD}";
public static final Logger consoleLog = Bukkit.getLogger();
public final Settings settings = new BukkitPluginConfiguration(this);
- private final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this);
+ public final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this);
public final PlayerEventsListener bukkitListener = new PlayerEventsListener(this);
public final BackendJson fileCache = new BackendJson(getDataFolder());
- public final BackendDatabase connection = new BackendDatabase(this);
- public final InternalCache internalCache = new InternalCache(this);
+ public final BackendDatabase connection = new BackendDatabase(BukkitPluginMain.consoleLog, getServer().getServerId());
+ public final InternalCache internalCache = new InternalCache();
public final BukkitPermissionManager permissionManager = new BukkitPermissionManager(this);
public final BukkitRegionProviders regionListProvider = new BukkitRegionProviders(this);
private final RegionUpdateObserver regionUpdateObserver = new RegionUpdateObserver(this);
- public final CommandHelper commandHelper = new CommandHelper(this);
+ public final BukkitCommands commandHelper = new BukkitCommands(this);
public final BukkitMaintenance maintenance = new BukkitMaintenance(this);
private MetricsLite metrics;
@Override
@@ -122,10 +124,4 @@ public final class BukkitPluginMain extends JavaPlugin
message = GenericChatCodes.processStringStatic(chatPrefix + message);
sender.sendMessage(message);
}
- @SuppressWarnings({"DeadBranch", "UnusedAssignment"})
- public static void main(String args[])
- {
- System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic");
- System.out.println("https://github.com/SimSonic/rscPermissions/");
- }
}
diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/DatabaseContents.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/DatabaseContents.java
deleted file mode 100644
index d63cedd..0000000
--- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/DatabaseContents.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package ru.simsonic.rscPermissions.DataTypes;
-import java.util.ArrayList;
-
-public class DatabaseContents
-{
- public RowEntity entities[];
- public RowPermission permissions[];
- public RowInheritance inheritance[];
- public void normalize()
- {
- // Entities
- final ArrayList listE = new ArrayList<>();
- if(entities != null)
- for(RowEntity rowE : entities)
- {
- listE.add(rowE);
- }
- entities = listE.toArray(new RowEntity[listE.size()]);
- // Permissions
- final ArrayList listP = new ArrayList<>();
- if(permissions != null)
- for(RowPermission rowP : permissions)
- {
- listP.add(rowP);
- }
- permissions = listP.toArray(new RowPermission[listP.size()]);
- // Inheritance
- final ArrayList listI = new ArrayList<>();
- if(inheritance != null)
- for(RowInheritance rowI : inheritance)
- {
- listI.add(rowI);
- }
- inheritance = listI.toArray(new RowInheritance[listI.size()]);
- }
-}
diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java
deleted file mode 100644
index 8b953e6..0000000
--- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package ru.simsonic.rscPermissions.DataTypes;
-import java.sql.Timestamp;
-
-public class RowEntity extends AbstractRow
-{
- public String entity;
- public EntityType entityType;
- public String prefix;
- public String suffix;
- public Timestamp lifetime;
-}
diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowPermission.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowPermission.java
deleted file mode 100644
index 1fc48db..0000000
--- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowPermission.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package ru.simsonic.rscPermissions.DataTypes;
-import java.sql.Timestamp;
-
-public class RowPermission extends AbstractRow
-{
- public String entity;
- public EntityType entityType;
- public String permission;
- public boolean value;
- public Destination destination;
- public int expirience;
- public Timestamp lifetime;
-}
diff --git a/src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java b/src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java
index 30c6416..54ed934 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java
@@ -1,8 +1,8 @@
package ru.simsonic.rscPermissions.Importers;
import java.util.ArrayList;
-import ru.simsonic.rscPermissions.DataTypes.RowEntity;
-import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
-import ru.simsonic.rscPermissions.DataTypes.RowPermission;
+import ru.simsonic.rscPermissions.API.RowEntity;
+import ru.simsonic.rscPermissions.API.RowInheritance;
+import ru.simsonic.rscPermissions.API.RowPermission;
public abstract class BaseImporter
{
diff --git a/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java b/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java
new file mode 100644
index 0000000..36eb6f5
--- /dev/null
+++ b/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java
@@ -0,0 +1,31 @@
+package ru.simsonic.rscPermissions;
+import java.io.File;
+import java.util.logging.Logger;
+import ru.simsonic.rscPermissions.Backends.BackendDatabase;
+import ru.simsonic.rscPermissions.Backends.BackendJson;
+import ru.simsonic.rscPermissions.Backends.DatabaseContents;
+import ru.simsonic.rscPermissions.InternalCache.InternalCache;
+
+public class IndependentMain
+{
+ private static final BackendJson localJsn = new BackendJson(new File("../"));
+ private static final BackendDatabase remoteDb = new BackendDatabase(Logger.getGlobal(), "test");
+ private static final InternalCache intCache = new InternalCache();
+ @SuppressWarnings({"DeadBranch", "UnusedAssignment"})
+ public static void main(String args[])
+ {
+ String[] qqq = "".split("x+");
+ System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic");
+ System.out.println("https://github.com/SimSonic/rscPermissions/");
+ // TESTING HERE
+ remoteDb.initialize(null, "voxile.ru:3306/servers-shared", "", "", "rscp_");
+ if(remoteDb.connect())
+ {
+ final DatabaseContents contents = remoteDb.retrieveContents();
+ contents.normalize();
+ localJsn.cleanup();
+ localJsn.saveContents(contents);
+ intCache.fill(contents);
+ }
+ }
+}
diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java
index 485998a..7c51075 100644
--- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java
+++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java
@@ -3,20 +3,17 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import ru.simsonic.rscPermissions.DataTypes.EntityType;
-import ru.simsonic.rscPermissions.DataTypes.RowEntity;
-import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
-import ru.simsonic.rscPermissions.DataTypes.RowPermission;
-import ru.simsonic.rscPermissions.BukkitPluginMain;
+import ru.simsonic.rscPermissions.API.EntityType;
+import ru.simsonic.rscPermissions.API.RowEntity;
+import ru.simsonic.rscPermissions.API.RowInheritance;
+import ru.simsonic.rscPermissions.API.RowPermission;
import ru.simsonic.rscPermissions.API.Settings;
-import ru.simsonic.rscPermissions.DataTypes.DatabaseContents;
+import ru.simsonic.rscPermissions.Backends.DatabaseContents;
public class InternalCache
{
- protected final BukkitPluginMain plugin;
- public InternalCache(BukkitPluginMain rscp)
+ public InternalCache()
{
- this.plugin = rscp;
}
protected final RowInheritance defaultInheritance = new RowInheritance();
public void setDefaultGroup(String defaultGroup)
@@ -85,17 +82,17 @@ public class InternalCache
result.subleafs = subleafs.toArray(new InheritanceLeaf[subleafs.size()]);
return result;
}
- public synchronized ResolutionResult resolvePlayer(String player)
+ public synchronized ResolutionResult resolvePlayer(String player, String serverId)
{
- return resolvePlayer(new String[] { player });
+ return resolvePlayer(new String[] { player }, serverId);
}
- public synchronized ResolutionResult resolvePlayer(String[] player)
+ public synchronized ResolutionResult resolvePlayer(String[] player, String serverId)
{
final ResolutionParams params = new ResolutionParams();
params.applicableIdentifiers = player;
params.destRegions = new String[] {};
// params.destWorld = "";
- params.destServerId = plugin.getServer().getServerId();
+ params.destServerId = serverId;
// params.expirience = 0;
return resolvePlayer(params);
}
diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/Matchers.java
similarity index 53%
rename from src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java
rename to src/main/java/ru/simsonic/rscPermissions/InternalCache/Matchers.java
index 3195934..b30824f 100644
--- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java
+++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/Matchers.java
@@ -1,9 +1,15 @@
-package ru.simsonic.rscPermissions.DataTypes;
+package ru.simsonic.rscPermissions.InternalCache;
import java.util.regex.Pattern;
-public abstract class AbstractRow
+public class Matchers
{
- public int id = 0;
+ private static final String genericSplitter = "\\s*[;,\\r\\n\\s]+\\s*";
+ public static String[] genericParse(String multiobject)
+ {
+ if(multiobject == null)
+ multiobject = "";
+ return multiobject.split(genericSplitter);
+ }
private static final Pattern patternUUID = Pattern.compile(
"" + "(?:[a-f\\d]{8}(?:-[a-f\\d]{4}){3}-[a-f\\d]{12})" + "");
private static boolean isCorrectUUID(String entityName)
diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java
index b6b2b4f..a8bfbb3 100644
--- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java
+++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java
@@ -1,5 +1,5 @@
package ru.simsonic.rscPermissions.InternalCache;
-import ru.simsonic.rscPermissions.DataTypes.RowPermission;
+import ru.simsonic.rscPermissions.API.RowPermission;
public class ResolutionResult
{
diff --git a/src/main/resources/sqlt/Initialize_main_v1.sqlt b/src/main/resources/sqlt/Initialize_main_v1.sqlt
index 2464168..983ae19 100644
--- a/src/main/resources/sqlt/Initialize_main_v1.sqlt
+++ b/src/main/resources/sqlt/Initialize_main_v1.sqlt
@@ -37,27 +37,3 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}inheritance` (
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `inheritance_UNIQUE` (`entity`, `parent`, `inheritance_type`, `destination`, `expirience`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci';
-
-/* Merged updates 0.1a -> 0.5.9b -> 0.6b -> 0.8.15b -> 0.9.2b */
-
-ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}entities`
- COLLATE 'utf8_general_ci';
-
-ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}permissions`
- CHANGE COLUMN `value` `value` BIT(1) NOT NULL DEFAULT b'1',
- CHANGE COLUMN `permission` `permission` VARCHAR(255) NOT NULL,
- CHANGE COLUMN `destination` `destination` VARCHAR(255) NOT NULL DEFAULT '',
- CHANGE COLUMN `expirience` `expirience` SMALLINT(6) NOT NULL DEFAULT 0,
- COLLATE 'utf8_general_ci';
-
-ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}inheritance`
- CHANGE COLUMN `destination` `destination` VARCHAR(255) NOT NULL DEFAULT '',
- CHANGE COLUMN `expirience` `expirience` SMALLINT(6) NOT NULL DEFAULT 0,
- DROP PRIMARY KEY, ADD PRIMARY KEY (`id`),
- COLLATE 'utf8_general_ci';
-
-ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}servers`
- COLLATE 'utf8_general_ci';
-
-ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}entities`
- ADD COLUMN `lifetime` TIMESTAMP NULL DEFAULT NULL AFTER `suffix`;