diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java index b17fb55..23936e3 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java @@ -73,8 +73,7 @@ public class BukkitDatabaseFetcher extends RestartableThread + "Database has been fetched in " + queryTime + " milliseconds.")); } }); - } - else + } else BukkitPluginMain.consoleLog.warning("[rscp] Cannot load data from database."); } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java index 641ab60..12031b7 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java @@ -170,6 +170,16 @@ public class BukkitPermissionManager extends RestartableThread resolutions.put(player.toString(), result); return result; } + public synchronized void forgetOfflinePlayer(OfflinePlayer offline) + { + for(String id : getOfflinePlayerIdentifiers(offline)) + resolutions.remove(id); + } + public synchronized void forgetPlayer(Player player) + { + for(String id : getPlayerIdentifiers(player)) + resolutions.remove(id); + } private static String[] getOfflinePlayerIdentifiers(OfflinePlayer offline) { final ArrayList result = new ArrayList<>(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java index 29ed40d..1a1a497 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java @@ -145,25 +145,25 @@ public final class VaultPermission extends net.milkbowl.vault.permission.Permiss throw new UnsupportedOperationException("This method is unsupported by rscPermissions."); } @Override - public boolean playerAddTransient(String worldName, OfflinePlayer player, String permission) + public boolean playerAddTransient(String world, OfflinePlayer player, String permission) { bridge.printDebugStackTrace(); throw new UnsupportedOperationException("This method is unsupported by rscPermissions."); } @Override - public boolean playerAddTransient(String worldName, Player player, String permission) + public boolean playerAddTransient(String world, Player player, String permission) { bridge.printDebugStackTrace(); throw new UnsupportedOperationException("This method is unsupported by rscPermissions."); } @Override - public boolean playerRemoveTransient(String worldName, OfflinePlayer player, String permission) + public boolean playerRemoveTransient(String world, OfflinePlayer player, String permission) { bridge.printDebugStackTrace(); throw new UnsupportedOperationException("This method is unsupported by rscPermissions."); } @Override - public boolean playerRemoveTransient(String worldName, Player player, String permission) + public boolean playerRemoveTransient(String world, Player player, String permission) { bridge.printDebugStackTrace(); throw new UnsupportedOperationException("This method is unsupported by rscPermissions."); 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 2cd7f1a..528e4d4 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java @@ -22,6 +22,10 @@ public class BackendDatabase extends ConnectionMySQL { return super.connect() && executeUpdateT("Deployment"); } + public synchronized void insertExampleRows() + { + executeUpdateT("ExampleContents"); + } public synchronized DatabaseContents retrieveContents() { executeUpdateT("Cleanup"); @@ -104,10 +108,6 @@ public class BackendDatabase extends ConnectionMySQL } return result.toArray(new RowInheritance[result.size()]); } - public synchronized void insertExampleRows() - { - executeUpdateT("Insert_example_rows_v1"); - } public synchronized void updateEntityText(String entity, boolean entity_type, String text, boolean isPrefix) { if("".equals(entity)) @@ -120,10 +120,34 @@ public class BackendDatabase extends ConnectionMySQL setupQueryTemplate("{TEXT}", (text != null) ? "'" + text + "'" : "NULL"); executeUpdateT("Update_entity_text"); } - public synchronized void addUserParentGroup(String user, String newGroup) + public synchronized void LockTables() + { + executeUpdate("LOCK TABLES `{DATABASE}`.`{PREFIX}entities`, `{DATABASE}`.`{PREFIX}permissions`, `{DATABASE}`.`{PREFIX}inheritance`;"); + } + public synchronized void UnlockTables() + { + executeUpdate("UNLOCK TABLES;"); + } + public synchronized void transactionStart() + { + executeUpdate("BEGIN TRANSACTION;"); + } + public synchronized void transactionCommit() + { + executeUpdate("COMMIT;"); + } + public synchronized void transactionCancel() + { + executeUpdate("ROLLBACK;"); + } + public synchronized void modifyDatabase() { - setupQueryTemplate("{USER}", user); - setupQueryTemplate("{PARENT}", newGroup); - executeUpdate("INSERT INTO `{DATABASE}`.`{PREFIX}inheritance` (`entity`, `parent`, `inheritance_type`) VALUES ('{USER}', '{PARENT}', b'1');"); + LockTables(); + // FETCH ALL DATA + transactionStart(); + // MAKE MODIFICATIONS + transactionCommit(); + UnlockTables(); + // FETCH ALL DATA AGAIN } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java b/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java index 794a970..71a0890 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java @@ -9,8 +9,8 @@ import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; public class ResolutionResult { - public String prefix; - public String suffix; + public String prefix = ""; + public String suffix = ""; public Map permissions; protected Set groups; public boolean hasPermission(String permission) diff --git a/src/main/resources/sqlt/ExampleContents.sqlt b/src/main/resources/sqlt/ExampleContents.sqlt new file mode 100644 index 0000000..50a4ad9 --- /dev/null +++ b/src/main/resources/sqlt/ExampleContents.sqlt @@ -0,0 +1,45 @@ +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'); + +INSERT IGNORE INTO + `{DATABASE}`.`{PREFIX}permissions` + (`entity`, `entity_type`, `destination`, `permission`) +VALUES + ('Administrators', b'0', '', '*'), + ('Builders', b'0', '', 'worldedit.*'), + ('Builders', b'0', '', 'rscp.maintenance.*'), + ('Default', b'0', '', 'herochat.speak.*'), + ('Default', b'0', '@RPG', 'scavenger.level'), + ('rpgLevelLow', b'0', '@RPG', 'some.plugin.perm'), + ('rpgLevelMedium', b'0', '@RPG', 'other.plugin.perm'), + ('rpgLevelHigh', b'0', '@RPG', 'third.plugin.superperm'), + ('Donators', b'0', '', 'scavenger.scavenge'); + +INSERT IGNORE INTO + `{DATABASE}`.`{PREFIX}inheritance` + (`entity`, `parent`, `inheritance_type`, `destination`, `expirience`) +VALUES + ('Moderators', 'Administrators', b'0', '', 0), + ('Default', 'rpgLevelLow', b'0', '@RPG', 10), + ('Default', 'rpgLevelMedium', b'0', '@RPG', 100), + ('Default', 'rpgLevelHigh', b'0', '@RPG', 1000), + ('rpgOutcasts', 'Default', b'0', '@RPG', 0), + ('rpgTramps', 'Default', b'0', '@RPG', 0), + ('rpgCitizens', 'rpgTramps', b'0', '@RPG', 0), + ('rpgElites', 'rpgCitizens', b'0', '@RPG', 0), + ('rpgHeads', 'rpgElites', b'0', '@RPG', 0), + ('testplayer', 'Donators', b'1', '@RPG', 0); + +INSERT INTO + `{DATABASE}`.`{PREFIX}inheritance` + (`entity`, `parent`, `inheritance_type`, `destination`, `lifetime`) +VALUES + ('testplayer', 'rpgTramps', b'1', '@RPG', NULL), + ('testplayer', 'Donators1Month', b'1', '', TIMESTAMPADD(MONTH, 1, NOW()));