Browse Source

Try to fix compatibility with SimpleChat and other prefix/suffer plugins

master
Stanislav Usenkov 10 years ago
parent
commit
249ab76dbf
  1. 3
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java
  2. 10
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java
  3. 8
      src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java
  4. 40
      src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java
  5. 4
      src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java
  6. 45
      src/main/resources/sqlt/ExampleContents.sqlt

3
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.");
}
}

10
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<String> result = new ArrayList<>();

8
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.");

40
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
}
}

4
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<String, Boolean> permissions;
protected Set<String> groups;
public boolean hasPermission(String permission)

45
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()));
Loading…
Cancel
Save