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`