diff --git a/src/main/java/ru/simsonic/rscPermissions/API/Destination.java b/src/main/java/ru/simsonic/rscPermissions/API/Destination.java
index ff55413..750e63f 100644
--- a/src/main/java/ru/simsonic/rscPermissions/API/Destination.java
+++ b/src/main/java/ru/simsonic/rscPermissions/API/Destination.java
@@ -69,21 +69,26 @@ public class Destination
"" + testing.toLowerCase() + "",
"" + pattern.toLowerCase() + "");
}
- private static final Pattern destinationPattern = Pattern.compile(
+ private static final Pattern DESTINATION_PATTERN = Pattern.compile(
"(?:([\\w\\-\\_\\*\\?]*):)?([\\w\\-\\_\\*\\?]*)?(?:@([\\w\\-\\_\\*\\?]*))?");
public static Destination parseDestination(String destination)
{
- final Matcher match = destinationPattern.matcher(destination);
+ final Matcher match = DESTINATION_PATTERN.matcher(destination);
if(match.find())
{
final String groupR = match.group(1);
final String groupW = match.group(2);
final String groupS = match.group(3);
- final String region = (groupR == null || "".equals(groupR)) ? "*" : groupR;
- final String world = (groupW == null || "".equals(groupW)) ? "*" : groupW;
- final String serverId = (groupS == null || "".equals(groupS)) ? "*" : groupS;
+ final String region = (groupR == null || "".equals(groupR) ? "*" : groupR);
+ final String world = (groupW == null || "".equals(groupW) ? "*" : groupW);
+ final String serverId = (groupS == null || "".equals(groupS) ? "*" : groupS);
return new Destination(region, world, serverId);
}
return new Destination();
}
+ @Override
+ public String toString()
+ {
+ return String.format("%s:%s@%s", region, world, serverId);
+ }
}
diff --git a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
index 3736e13..b9ef5bf 100644
--- a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
+++ b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
@@ -50,13 +50,6 @@ public class BridgeForBukkitAPI
{
return rscp.isEnabled();
}
- public Player findPlayer(String player)
- {
- for(Player online : Tools.getOnlinePlayers())
- if(online.getName().equals(player))
- return online;
- return null;
- }
protected void setupVault()
{
final ConsoleCommandSender console = rscp.getServer().getConsoleSender();
diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitUtilities.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitUtilities.java
index 0dd1c8a..afa83fc 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitUtilities.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitUtilities.java
@@ -4,9 +4,17 @@ import java.net.InetSocketAddress;
import java.util.ArrayList;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
+import ru.simsonic.rscMinecraftLibrary.Bukkit.Tools;
public class BukkitUtilities
{
+ public static Player findOnlinePlayer(String player)
+ {
+ for(Player online : Tools.getOnlinePlayers())
+ if(online.getName().equals(player))
+ return online;
+ return null;
+ }
public static String[] getOfflinePlayerIdentifiers(OfflinePlayer offline)
{
final ArrayList result = new ArrayList<>();
diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java
index 7a5501a..712bb30 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java
@@ -5,6 +5,7 @@ import java.util.Collections;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException;
+import ru.simsonic.rscPermissions.Bukkit.BukkitUtilities;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseTransaction;
import ru.simsonic.rscPermissions.Engine.Matchers;
@@ -28,7 +29,7 @@ public class CommandUser
{
if(args.length < 3)
return;
- final Player player = rscp.bridgeForBukkit.findPlayer(args[1]);
+ final Player player = BukkitUtilities.findOnlinePlayer(args[1]);
if(player != null)
args[1] = player.getName();
final ResolutionResult result = (player != null)
diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java
index e9d4f36..d92ec2c 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java
@@ -148,14 +148,19 @@ public class BackendDatabase extends ConnectionMySQL
{
executeUpdate("ROLLBACK;");
}
- public synchronized void modifyDatabase()
- {
- lockTableEntities();
- // FETCH ALL DATA
- transactionStart();
- // MAKE MODIFICATIONS
- transactionCommit();
- unlockAllTables();
- // FETCH ALL DATA AGAIN
+ public synchronized void removeEntityById(long id)
+ {
+ setupQueryTemplate("{ID}", Long.toString(id));
+ executeUpdateT("DELETE FROM `{DATABASE}`.`{PREFIX}entities` WHERE `id` = '{ID}';");
+ }
+ public synchronized void removePermissionsById(long id)
+ {
+ setupQueryTemplate("{ID}", Long.toString(id));
+ executeUpdateT("DELETE FROM `{DATABASE}`.`{PREFIX}permissions` WHERE `id` = '{ID}';");
+ }
+ public synchronized void removeInheritanceById(long id)
+ {
+ setupQueryTemplate("{ID}", Long.toString(id));
+ executeUpdateT("DELETE FROM `{DATABASE}`.`{PREFIX}inheritance` WHERE `id` = '{ID}';");
}
}
diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendJson.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendJson.java
index 5274be7..dcf6b19 100644
--- a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendJson.java
+++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendJson.java
@@ -21,30 +21,30 @@ public class BackendJson
{
this.workingDir = workingDir;
}
- private final static String entitiesFile = "entities.json";
- private final static String permissionsFile = "permissions.json";
- private final static String inheritanceFile = "inheritance.json";
+ private final static String FILE_ENTITIES = "cached_entities.json";
+ private final static String FILE_PERMISSIONS = "cached_permissions.json";
+ private final static String FILE_INHERICATNCE = "cached_inheritance.json";
public synchronized DatabaseContents retrieveContents()
{
final Gson gson = new Gson();
final DatabaseContents result = new DatabaseContents();
// Entities
try(JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream(
- new File(workingDir, entitiesFile)), Charset.forName("UTF-8"))))
+ new File(workingDir, FILE_ENTITIES)), Charset.forName("UTF-8"))))
{
result.entities = gson.fromJson(jr, RowEntity[].class);
} catch(IOException ex) {
}
// Permissions
try(JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream(
- new File(workingDir, permissionsFile)), Charset.forName("UTF-8"))))
+ new File(workingDir, FILE_PERMISSIONS)), Charset.forName("UTF-8"))))
{
result.permissions = gson.fromJson(jr, RowPermission[].class);
} catch(IOException ex) {
}
// Inheritance
try(JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream(
- new File(workingDir, inheritanceFile)), Charset.forName("UTF-8"))))
+ new File(workingDir, FILE_INHERICATNCE)), Charset.forName("UTF-8"))))
{
result.inheritance = gson.fromJson(jr, RowInheritance[].class);
} catch(IOException ex) {
@@ -58,7 +58,7 @@ public class BackendJson
if(contents.entities == null)
contents.entities = new RowEntity[] {};
try(JsonWriter jw = new JsonWriter(new OutputStreamWriter(new FileOutputStream(
- new File(workingDir, entitiesFile)), Charset.forName("UTF-8"))))
+ new File(workingDir, FILE_ENTITIES)), Charset.forName("UTF-8"))))
{
jw.setIndent("\t");
gson.toJson(contents.entities, RowEntity[].class, jw);
@@ -68,7 +68,7 @@ public class BackendJson
if(contents.permissions == null)
contents.permissions = new RowPermission[] {};
try(JsonWriter jw = new JsonWriter(new OutputStreamWriter(new FileOutputStream(
- new File(workingDir, permissionsFile)), Charset.forName("UTF-8"))))
+ new File(workingDir, FILE_PERMISSIONS)), Charset.forName("UTF-8"))))
{
jw.setIndent("\t");
gson.toJson(contents.permissions, RowPermission[].class, jw);
@@ -78,7 +78,7 @@ public class BackendJson
if(contents.inheritance == null)
contents.inheritance = new RowInheritance[] {};
try(JsonWriter jw = new JsonWriter(new OutputStreamWriter(new FileOutputStream(
- new File(workingDir, inheritanceFile)), Charset.forName("UTF-8"))))
+ new File(workingDir, FILE_INHERICATNCE)), Charset.forName("UTF-8"))))
{
jw.setIndent("\t");
gson.toJson(contents.inheritance, RowInheritance[].class, jw);
@@ -87,8 +87,8 @@ public class BackendJson
}
public synchronized void cleanup()
{
- new File(workingDir, entitiesFile).delete();
- new File(workingDir, permissionsFile).delete();
- new File(workingDir, inheritanceFile).delete();
+ new File(workingDir, FILE_ENTITIES).delete();
+ new File(workingDir, FILE_PERMISSIONS).delete();
+ new File(workingDir, FILE_INHERICATNCE).delete();
}
}
diff --git a/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java b/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java
index 5fce9b0..22df690 100644
--- a/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java
+++ b/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java
@@ -12,23 +12,28 @@ import ru.simsonic.rscPermissions.Engine.ResolutionResult;
public class IndependentMain
{
private static final BackendJson localJsn = new BackendJson(new File("../"));
- private static final BackendDatabase remoteDb = new BackendDatabase(Logger.getGlobal());
+ private static final BackendDatabase database = new BackendDatabase(Logger.getGlobal());
private static final InternalCache intCache = new InternalCache();
@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/");
- // TESTING HERE
- remoteDb.initialize(null,
- "", // DATABASE
- "", // USERNAME
- "", // PASSWORD
+ // OK, IT'S SECURE FROM YOU :)
+ database.initialize(null,
+ "SCOUT:3306/rscp_testing", // DATABASE
+ "rscp_testing", // USERNAME
+ "rscp_testing", // PASSWORD
"rscp_");
- if(remoteDb.connect())
+ if(database.connect())
{
System.out.println("Retrieving permissions from database into json files.");
- final DatabaseContents contents = remoteDb.retrieveContents();
+ DatabaseContents contents = database.retrieveContents();
+ if(contents.isEmpty())
+ {
+ database.insertExampleRows();
+ contents = database.retrieveContents();
+ }
contents.normalize();
localJsn.cleanup();
localJsn.saveContents(contents);
diff --git a/src/main/resources/sqlt/Deployment.sqlt b/src/main/resources/sqlt/Deployment.sqlt
index 983ae19..ff8681e 100644
--- a/src/main/resources/sqlt/Deployment.sqlt
+++ b/src/main/resources/sqlt/Deployment.sqlt
@@ -1,3 +1,6 @@
+CREATE DATABASE IF NOT EXISTS `{DATABASE}`
+ DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE = 'utf8_general_ci';
+
CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}entities` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`entity` VARCHAR(64) NOT NULL,
@@ -8,7 +11,7 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}entities` (
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `entity_UNIQUE` (`entity`, `entity_type`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci';
+) ENGINE = 'InnoDB' AUTO_INCREMENT = 1 DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE = 'utf8_general_ci';
CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}permissions` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
@@ -22,7 +25,7 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}permissions` (
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `permission_UNIQUE` (`entity`, `entity_type`, `permission`, `destination`, `expirience`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci';
+) ENGINE = 'InnoDB' AUTO_INCREMENT = 1 DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE = 'utf8_general_ci';
CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}inheritance` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
@@ -36,4 +39,4 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}inheritance` (
PRIMARY KEY (`id`, `entity`),
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';
+) ENGINE = 'InnoDB' AUTO_INCREMENT = 1 DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE = 'utf8_general_ci';
diff --git a/src/main/resources/sqlt/ExampleContents.sqlt b/src/main/resources/sqlt/ExampleContents.sqlt
index 50a4ad9..6955544 100644
--- a/src/main/resources/sqlt/ExampleContents.sqlt
+++ b/src/main/resources/sqlt/ExampleContents.sqlt
@@ -2,11 +2,14 @@ INSERT IGNORE INTO
`{DATABASE}`.`{PREFIX}entities`
(`entity`, `entity_type`, `prefix`, `suffix`)
VALUES
- ('Default', b'0', '§r', '§r'),
- ('Donators', b'0', '§r§6[Premium]§e', '§r'),
- ('Builders', b'0', '§r§5[Builder]§d', '§r'),
- ('Moderators', b'0', '§r§b[Moderator]§6', '§r'),
- ('Administrators', b'0', '§r§c[Administrator]§6', '§r');
+ ('Administrators', b'0', '§r§c[Admin]§6', '§r'),
+ ('Moderators', b'0', '§r§b[Moder]§6', '§r'),
+ ('Builders', b'0', '§r§5[Build]§d', '§r'),
+ ('Helpers' , b'0', '§r§5[Help]§d', '§r'),
+ ('VIP', b'0', '§r§8[V]§f', '§r'),
+ ('Premium', b'0', '§r§6[P]§e', '§r'),
+ ('Default', b'0', '§r', '§r'),
+ ('Guests', b'0', '§r§0[G]§8', '§r');
INSERT IGNORE INTO
`{DATABASE}`.`{PREFIX}permissions`