Browse Source

Версия 0.9.0a:

* Удалена работа с лестницами. Потенциально это должен делать другой плагин.
* Обновлены зависимости и их источники.
* Изменено имя главного класса на BukkitPliginMain.
* Создан на будущей новый класс SpongePluginMain.
* Статус "альфа", т.к. новый кеш ещё не оттестирован.
master
Stanislav Usenkov 11 years ago
parent
commit
8d5b1af8bf
  1. 198
      pom.xml
  2. 3
      src/main/java/ru/simsonic/rscPermissions/API/Settings.java
  3. 4
      src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java
  4. 77
      src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java
  5. 4
      src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
  6. 8
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissions.java
  7. 12
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java
  8. 6
      src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java
  9. 5
      src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
  10. 59
      src/main/java/ru/simsonic/rscPermissions/CommandHelper.java
  11. 6
      src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java
  12. 2
      src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java
  13. 2
      src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java
  14. 44
      src/main/java/ru/simsonic/rscPermissions/DataTypes/RowLadder.java
  15. 6
      src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java
  16. 2
      src/main/java/ru/simsonic/rscPermissions/InternalCache/AbstractPermissionsCache.java
  17. 27
      src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java
  18. 24
      src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheData.java
  19. 41
      src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java
  20. 11
      src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java
  21. 123
      src/main/java/ru/simsonic/rscPermissions/Ladders.java
  22. 4
      src/main/java/ru/simsonic/rscPermissions/MaintenanceMode.java
  23. 12
      src/main/java/ru/simsonic/rscPermissions/RegionListProviders.java
  24. 6
      src/main/java/ru/simsonic/rscPermissions/RegionUpdateObserver.java
  25. 27
      src/main/java/ru/simsonic/rscPermissions/SpongePluginMain.java
  26. 12
      src/main/resources/plugin.yml
  27. 14
      src/main/resources/sqlt/Drop_user_from_ladder.sqlt
  28. 17
      src/main/resources/sqlt/Initialize_main_v1.sqlt
  29. 11
      src/main/resources/sqlt/Insert_example_rows_v1.sqlt
  30. 7
      src/main/resources/sqlt/Set_user_rank.sqlt

198
pom.xml

@ -4,11 +4,107 @@
<groupId>ru.simsonic</groupId> <groupId>ru.simsonic</groupId>
<artifactId>rscPermissions</artifactId> <artifactId>rscPermissions</artifactId>
<version>0.9.0b</version> <version>0.9.0a</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>rscPermissions</name> <name>rscPermissions</name>
<url>http://maven.apache.org</url> <url>https://github.com/SimSonic/rscPermissions</url>
<repositories>
<!-- Bukkit / Spigot / Sponge -->
<repository>
<id>sponge-repo</id>
<url>http://repo.spongepowered.org/Sponge/maven</url>
</repository>
<repository>
<id>bukkit-repo</id>
<url>http://repo.bukkit.org/content/groups/public</url>
</repository>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
</repository>
<!-- VaultAPI -->
<repository>
<id>vault-repo</id>
<url>http://nexus.theyeticave.net/content/repositories/pub_releases</url>
</repository>
<!-- Region list providers: WorldGuard, Residence -->
<repository>
<id>sk89q-repo</id>
<url>http://maven.sk89q.com/repo/</url>
</repository>
<repository>
<id>Residence</id>
<url>http://ci.drtshock.net/plugin/repository/everything/</url>
</repository>
</repositories>
<dependencies>
<!-- MySQL используется как основное хранилище прав -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
<scope>runtime</scope>
</dependency>
<!-- Локальный кеш будет храниться в json-файле -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<!-- В первую очередь плагин создан под платформу Bukkit (Spigot) -->
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>1.7.9-R0.2</version>
<scope>provided</scope>
</dependency>
<!-- В связи с появлением Sponge API, разработка будет вестись и под него -->
<dependency>
<groupId>org.spongepowered</groupId>
<artifactId>spongeapi</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<!-- Стандарт подключения менеджера прав и чата к Bukkit -->
<dependency>
<groupId>net.milkbowl.vault</groupId>
<artifactId>VaultAPI</artifactId>
<version>1.5</version>
<scope>provided</scope>
</dependency>
<!-- Зависимости для провайдеров регионов -->
<dependency>
<groupId>com.sk89q</groupId>
<artifactId>worldedit</artifactId>
<version>6.0.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sk89q</groupId>
<artifactId>worldguard</artifactId>
<version>6.0.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.t00thpick1</groupId>
<artifactId>Residence</artifactId>
<version>3.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- Какие-то временные изыски Reality_SC, в будущем уберуться -->
<dependency>
<groupId>ru.simsonic</groupId>
<artifactId>rscAPI</artifactId>
<version>1.2.3</version>
<scope>compile</scope>
<type>jar</type>
</dependency>
</dependencies>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@ -64,23 +160,10 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<!--plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin-->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version> <version>2.10.1</version>
<executions> <executions>
<execution> <execution>
<id>attach-javadocs</id> <id>attach-javadocs</id>
@ -102,87 +185,4 @@
</resource> </resource>
</resources> </resources>
</build> </build>
<repositories>
<!-- Bukkit API -->
<repository>
<id>bukkit-repo</id>
<url>http://repo.bukkit.org/content/groups/public</url>
</repository>
<!-- Vault and VaultAPI -->
<repository>
<id>VaultAPI</id>
<url>http://nexus.theyeticave.net/content/repositories/pub_releases</url>
</repository>
<!-- Region list providers: WorldGuard, Residence -->
<repository>
<id>sk89q-repo</id>
<url>http://maven.sk89q.com/repo/</url>
</repository>
<repository>
<id>maven.sk89q.com</id>
<url>http://maven.sk89q.com/artifactory/libs-release-local</url>
</repository>
<repository>
<id>maven.sk89q.com-snapshot</id>
<url>http://maven.sk89q.com/artifactory/libs-snapshot-local</url>
</repository>
<repository>
<id>Residence</id>
<url>http://ci.drtshock.net/plugin/repository/everything/</url>
</repository>
<!-- My own libraries and APIs -->
<repository>
<id>voxile.ru</id>
<url>http://s9.voxile.ru/plugin/repository/everything/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>1.7.9-R0.2</version>
<scope>provided</scope>
<type>jar</type>
</dependency>
<dependency>
<groupId>ru.simsonic</groupId>
<artifactId>rscAPI</artifactId>
<version>1.2.1</version>
<scope>compile</scope>
<type>jar</type>
</dependency>
<dependency>
<groupId>net.milkbowl.vault</groupId>
<artifactId>VaultAPI</artifactId>
<version>1.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sk89q</groupId>
<artifactId>worldedit</artifactId>
<version>5.6.2</version>
<scope>compile</scope>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.sk89q</groupId>
<artifactId>worldguard</artifactId>
<version>6.0.0-SNAPSHOT</version>
<scope>provided</scope>
<type>jar</type>
</dependency>
<dependency>
<groupId>net.t00thpick1</groupId>
<artifactId>Residence</artifactId>
<version>3.0-SNAPSHOT</version>
<scope>provided</scope>
<type>jar</type>
</dependency>
</dependencies>
</project> </project>

3
src/main/java/ru/simsonic/rscPermissions/Settings.java → src/main/java/ru/simsonic/rscPermissions/API/Settings.java

@ -1,4 +1,5 @@
package ru.simsonic.rscPermissions; package ru.simsonic.rscPermissions.API;
import ru.simsonic.rscPermissions.ConnectionHelper;
public interface Settings public interface Settings
{ {

4
src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java

@ -1,7 +1,6 @@
package ru.simsonic.rscPermissions.Backends; package ru.simsonic.rscPermissions.Backends;
import ru.simsonic.rscPermissions.DataTypes.RowEntity; import ru.simsonic.rscPermissions.DataTypes.RowEntity;
import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowLadder;
import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.InternalCache.AbstractPermissionsCache; import ru.simsonic.rscPermissions.InternalCache.AbstractPermissionsCache;
@ -14,11 +13,8 @@ public interface Backend
public abstract RowEntity[] fetchEntities(); public abstract RowEntity[] fetchEntities();
public abstract RowPermission[] fetchPermissions(); public abstract RowPermission[] fetchPermissions();
public abstract RowInheritance[] fetchInheritance(); public abstract RowInheritance[] fetchInheritance();
public abstract RowLadder[] fetchLadders();
public abstract void insertExampleRows(); public abstract void insertExampleRows();
public abstract void updateEntityText(String entity, boolean entity_type, String text, boolean isPrefix); public abstract void updateEntityText(String entity, boolean entity_type, String text, boolean isPrefix);
public abstract void setUserRank(String user, String ladder, int rank);
public abstract void dropUserFromLadder(String user, String ladder);
public abstract void addUserParentGroup(String user, String newGroup); public abstract void addUserParentGroup(String user, String newGroup);
} }

77
src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java

@ -7,19 +7,17 @@ import ru.simsonic.rscPermissions.DataTypes.Destination;
import ru.simsonic.rscPermissions.DataTypes.EntityType; import ru.simsonic.rscPermissions.DataTypes.EntityType;
import ru.simsonic.rscPermissions.DataTypes.RowEntity; import ru.simsonic.rscPermissions.DataTypes.RowEntity;
import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowLadder;
import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.InternalCache.AbstractPermissionsCache; import ru.simsonic.rscPermissions.InternalCache.AbstractPermissionsCache;
import ru.simsonic.rscPermissions.MainPluginClass; import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Settings;
import ru.simsonic.utilities.ConnectionMySQL; import ru.simsonic.utilities.ConnectionMySQL;
public class BackendMySQL extends ConnectionMySQL implements Backend public class BackendMySQL extends ConnectionMySQL implements Backend
{ {
protected final MainPluginClass plugin; protected final BukkitPluginMain plugin;
protected static enum WorkMode { read, write, none, } protected static enum WorkMode { read, write, none, }
protected WorkMode RememberWork; protected WorkMode RememberWork;
public BackendMySQL(MainPluginClass plugin) public BackendMySQL(BukkitPluginMain plugin)
{ {
this.plugin = plugin; this.plugin = plugin;
} }
@ -86,14 +84,13 @@ public class BackendMySQL extends ConnectionMySQL implements Backend
public synchronized void fetchIntoCache(AbstractPermissionsCache cache) public synchronized void fetchIntoCache(AbstractPermissionsCache cache)
{ {
cleanupTables(); cleanupTables();
MainPluginClass.consoleLog.log(Level.INFO, BukkitPluginMain.consoleLog.log(Level.INFO,
"[rscp] Fetched {0}e, {1}p, {2}i, {3}l, from \"{4}\".", "[rscp] Fetched {0}e, {1}p, {2}i, from \"{4}\".",
new Object[] new Object[]
{ {
Integer.toString(cache.ImportEntities(fetchEntities())), Integer.toString(cache.ImportEntities(fetchEntities())),
Integer.toString(cache.ImportPermissions(fetchPermissions())), Integer.toString(cache.ImportPermissions(fetchPermissions())),
Integer.toString(cache.ImportInheritance(fetchInheritance())), Integer.toString(cache.ImportInheritance(fetchInheritance())),
Integer.toString(cache.ImportLadders(fetchLadders())),
RememberName, RememberName,
}); });
} }
@ -117,7 +114,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend
} }
rs.close(); rs.close();
} catch(SQLException ex) { } catch(SQLException ex) {
MainPluginClass.consoleLog.log(Level.WARNING, "[rscp] Exception in rs2e(): {0}", ex); BukkitPluginMain.consoleLog.log(Level.WARNING, "[rscp] Exception in rs2e(): {0}", ex);
} }
return result.toArray(new RowEntity[result.size()]); return result.toArray(new RowEntity[result.size()]);
} }
@ -149,7 +146,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend
} }
rs.close(); rs.close();
} catch(SQLException ex) { } catch(SQLException ex) {
MainPluginClass.consoleLog.log(Level.WARNING, "[rscp] Exception in rs2p(): {0}", ex); BukkitPluginMain.consoleLog.log(Level.WARNING, "[rscp] Exception in rs2p(): {0}", ex);
} }
return result.toArray(new RowPermission[result.size()]); return result.toArray(new RowPermission[result.size()]);
} }
@ -182,42 +179,11 @@ public class BackendMySQL extends ConnectionMySQL implements Backend
} }
rs.close(); rs.close();
} catch(SQLException ex) { } catch(SQLException ex) {
MainPluginClass.consoleLog.log(Level.WARNING, "[rscp] Exception in rs2i(): {0}", ex); BukkitPluginMain.consoleLog.log(Level.WARNING, "[rscp] Exception in rs2i(): {0}", ex);
} }
return result.toArray(new RowInheritance[result.size()]); return result.toArray(new RowInheritance[result.size()]);
} }
@Override @Override
public synchronized RowLadder[] fetchLadders()
{
final ArrayList<RowLadder> result = new ArrayList<>();
final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}ladders`;");
try
{
while(rs.next())
{
RowLadder row = new RowLadder();
row.id = rs.getInt("id");
row.climber = rs.getString("climber");
if("".equals(row.climber))
row.climber = null;
row.climberType = EntityType.byValue(rs.getInt("climber_type"));
row.ladder = rs.getString("ladder");
String[] breaked = row.ladder.split(Settings.separatorRegExp);
if(breaked.length == 2)
{
row.ladder = breaked[0];
row.instance = breaked[1];
}
row.rank = rs.getInt("rank");
result.add(row);
}
rs.close();
} catch(SQLException ex) {
MainPluginClass.consoleLog.log(Level.WARNING, "[rscp] Exception in rs2l(): {0}", ex);
}
return result.toArray(new RowLadder[result.size()]);
}
@Override
public synchronized void insertExampleRows() public synchronized void insertExampleRows()
{ {
executeUpdateT("Insert_example_rows_v1"); executeUpdateT("Insert_example_rows_v1");
@ -236,33 +202,6 @@ public class BackendMySQL extends ConnectionMySQL implements Backend
executeUpdateT("Update_entity_text"); executeUpdateT("Update_entity_text");
} }
@Override @Override
public synchronized void setUserRank(String user, String ladder, int rank)
{
if("".equals(user) || "".equals(ladder))
return;
setupQueryTemplate("{USER}", user);
setupQueryTemplate("{LADDER}", ladder);
setupQueryTemplate("{RANK}", Integer.toString(rank));
executeUpdateT("Set_user_rank");
}
@Override
public synchronized void dropUserFromLadder(String user, String ladder)
{
String instance = "";
String[] breaked = ladder.split(Settings.separatorRegExp);
if(breaked.length == 2)
{
ladder = breaked[0];
instance = breaked[1];
}
if("".equals(user) || "".equals(ladder))
return;
setupQueryTemplate("{USER}", user);
setupQueryTemplate("{LADDER}", ladder);
setupQueryTemplate("{INSTANCE}", instance);
executeUpdateT("Drop_user_from_ladder");
}
@Override
public synchronized void addUserParentGroup(String user, String newGroup) public synchronized void addUserParentGroup(String user, String newGroup)
{ {
setupQueryTemplate("{USER}", user); setupQueryTemplate("{USER}", user);

4
src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java

@ -4,10 +4,10 @@ import ru.simsonic.rscPermissions.Bukkit.VaultPermission;
public class BridgeForBukkitAPI public class BridgeForBukkitAPI
{ {
private final MainPluginClass rscp; private final BukkitPluginMain rscp;
private final VaultPermission vaultPermission; private final VaultPermission vaultPermission;
private final VaultChat vaultChat; private final VaultChat vaultChat;
protected BridgeForBukkitAPI(MainPluginClass plugin) protected BridgeForBukkitAPI(BukkitPluginMain plugin)
{ {
this.rscp = plugin; this.rscp = plugin;
this.vaultPermission = new VaultPermission(this); this.vaultPermission = new VaultPermission(this);

8
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissions.java

@ -7,12 +7,12 @@ import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment; import org.bukkit.permissions.PermissionAttachment;
import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.InternalCache.BrandNewCache; import ru.simsonic.rscPermissions.InternalCache.BrandNewCache;
import ru.simsonic.rscPermissions.MainPluginClass; import ru.simsonic.rscPermissions.BukkitPluginMain;
public class BukkitPermissions implements Runnable public class BukkitPermissions implements Runnable
{ {
private final MainPluginClass rscp; private final BukkitPluginMain rscp;
public BukkitPermissions(MainPluginClass plugin) public BukkitPermissions(BukkitPluginMain plugin)
{ {
this.rscp = plugin; this.rscp = plugin;
} }
@ -53,7 +53,7 @@ public class BukkitPermissions implements Runnable
thread.interrupt(); thread.interrupt();
thread.join(); thread.join();
} catch(InterruptedException ex) { } catch(InterruptedException ex) {
MainPluginClass.consoleLog.log(Level.SEVERE, "[rscp] Exception in BukkitPermissions: {0}", ex); BukkitPluginMain.consoleLog.log(Level.SEVERE, "[rscp] Exception in BukkitPermissions: {0}", ex);
} }
} }
thread = null; thread = null;

12
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java

@ -7,12 +7,12 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import ru.simsonic.rscPermissions.ConnectionHelper; import ru.simsonic.rscPermissions.ConnectionHelper;
import ru.simsonic.rscPermissions.MainPluginClass; import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Settings; import ru.simsonic.rscPermissions.API.Settings;
public class BukkitPluginConfiguration implements Settings public class BukkitPluginConfiguration implements Settings
{ {
private final MainPluginClass plugin; private final BukkitPluginMain plugin;
private String strDefaultGroup = "Default"; private String strDefaultGroup = "Default";
private String strMaintenanceMode = ""; private String strMaintenanceMode = "";
private boolean bAlwaysInheritDefault = false; private boolean bAlwaysInheritDefault = false;
@ -23,7 +23,7 @@ public class BukkitPluginConfiguration implements Settings
private int nAutoReloadDelayTicks = 20 * 900; private int nAutoReloadDelayTicks = 20 * 900;
private int nRegionFinderGranularity = 1000; private int nRegionFinderGranularity = 1000;
public final int CurrentVersion = 3; public final int CurrentVersion = 3;
public BukkitPluginConfiguration(final MainPluginClass plugin) public BukkitPluginConfiguration(final BukkitPluginMain plugin)
{ {
this.plugin = plugin; this.plugin = plugin;
} }
@ -36,10 +36,10 @@ public class BukkitPluginConfiguration implements Settings
{ {
case 1: case 1:
update_v1_to_v2(config); update_v1_to_v2(config);
MainPluginClass.consoleLog.info("[rscp] Configuration updated from v1 to v2."); BukkitPluginMain.consoleLog.info("[rscp] Configuration updated from v1 to v2.");
case 2: case 2:
update_v2_to_v3(config); update_v2_to_v3(config);
MainPluginClass.consoleLog.info("[rscp] Configuration updated from v2 to v3."); BukkitPluginMain.consoleLog.info("[rscp] Configuration updated from v2 to v3.");
case CurrentVersion: // Current version case CurrentVersion: // Current version
plugin.saveConfig(); plugin.saveConfig();
break; break;

6
src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java

@ -8,12 +8,12 @@ import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.event.player.PlayerLevelChangeEvent;
import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import ru.simsonic.rscPermissions.MainPluginClass; import ru.simsonic.rscPermissions.BukkitPluginMain;
public class PlayerEventsListener implements Listener public class PlayerEventsListener implements Listener
{ {
private final MainPluginClass rscp; private final BukkitPluginMain rscp;
public PlayerEventsListener(MainPluginClass plugin) public PlayerEventsListener(BukkitPluginMain plugin)
{ {
this.rscp = plugin; this.rscp = plugin;
} }

5
src/main/java/ru/simsonic/rscPermissions/MainPluginClass.java → src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java

@ -1,4 +1,5 @@
package ru.simsonic.rscPermissions; package ru.simsonic.rscPermissions;
import ru.simsonic.rscPermissions.API.Settings;
import java.io.IOException; import java.io.IOException;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -14,7 +15,7 @@ import ru.simsonic.rscPermissions.InternalCache.BrandNewCache;
import ru.simsonic.utilities.CommandAnswerException; import ru.simsonic.utilities.CommandAnswerException;
import ru.simsonic.utilities.LanguageUtility; import ru.simsonic.utilities.LanguageUtility;
public final class MainPluginClass extends JavaPlugin public final class BukkitPluginMain extends JavaPlugin
{ {
private static final String chatPrefix = "{_YL}[rscp] {GOLD}"; private static final String chatPrefix = "{_YL}[rscp] {GOLD}";
public static final Logger consoleLog = Logger.getLogger("Minecraft"); public static final Logger consoleLog = Logger.getLogger("Minecraft");
@ -127,7 +128,7 @@ public final class MainPluginClass extends JavaPlugin
System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic"); System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic");
System.out.println("http://dev.bukkit.org/bukkit-plugins/rscpermissions/"); System.out.println("http://dev.bukkit.org/bukkit-plugins/rscpermissions/");
// TEST SECTION STARTS BELOW // TEST SECTION STARTS BELOW
MainPluginClass mpc = new MainPluginClass(); BukkitPluginMain mpc = new BukkitPluginMain();
ConnectionHelper ch = new ConnectionHelper(mpc, null); ConnectionHelper ch = new ConnectionHelper(mpc, null);
ch.Initialize("Test", "voxile.ru:3306/servers-shared", "server-primary", "zcHzCBFZtTv28JfG", "rscp_"); ch.Initialize("Test", "voxile.ru:3306/servers-shared", "server-primary", "zcHzCBFZtTv28JfG", "rscp_");
ch.Connect(); ch.Connect();

59
src/main/java/ru/simsonic/rscPermissions/CommandHelper.java

@ -11,12 +11,10 @@ import ru.simsonic.utilities.CommandAnswerException;
public class CommandHelper public class CommandHelper
{ {
private final MainPluginClass plugin; private final BukkitPluginMain plugin;
public final Ladders ladderHelper; public CommandHelper(final BukkitPluginMain rscp)
public CommandHelper(final MainPluginClass rscp)
{ {
this.plugin = rscp; this.plugin = rscp;
ladderHelper = new Ladders(rscp);
} }
public void onCommand(CommandSender sender, Command cmd, String label, String[] args) throws CommandAnswerException public void onCommand(CommandSender sender, Command cmd, String label, String[] args) throws CommandAnswerException
{ {
@ -24,31 +22,14 @@ public class CommandHelper
{ {
case "rscp": case "rscp":
onCommandHub(sender, args); onCommandHub(sender, args);
return; break;
case "promote":
if(args.length >= 1)
{
ladderHelper.executePromotion(sender, args[0], (args.length >= 2) ? args[1] : null, true);
return;
}
throw new CommandAnswerException("/promote <user> <ladder[.instance]>");
case "demote":
if(args.length >= 1)
{
ladderHelper.executePromotion(sender, args[0], (args.length >= 2) ? args[1] : null, false);
return;
}
throw new CommandAnswerException("/demote <user> <ladder[.instance]>");
} }
} }
private void onCommandHub(CommandSender sender, String[] args) throws CommandAnswerException private void onCommandHub(CommandSender sender, String[] args) throws CommandAnswerException
{ {
final ArrayList<String> help = new ArrayList<>(); final ArrayList<String> help = new ArrayList<>();
if(sender.hasPermission("rscp.admin")) if(sender.hasPermission("rscp.admin"))
{ help.add("/rscp (user|group) {_LS}-- PermissionsEx-like admin commands");
help.add("/rscp (user|group|ladder) {_LS}-- PermissionsEx-like admin commands");
help.add("/rscp (promote|demote) {_LS}-- admin promotion/demotion commands");
}
if(sender.hasPermission("rscp.admin.lock")) if(sender.hasPermission("rscp.admin.lock"))
help.add("/rscp (lock|unlock) {_LS}-- maintenance mode control"); help.add("/rscp (lock|unlock) {_LS}-- maintenance mode control");
if(sender.hasPermission("rscp.admin")) if(sender.hasPermission("rscp.admin"))
@ -74,21 +55,6 @@ public class CommandHelper
case "group": case "group":
onCommandHubGroup(sender, args); onCommandHubGroup(sender, args);
return; return;
case "ladder":
onCommandHubLadder(sender, args);
return;
case "promote":
/* rscp promote <user> <ladder> */
if(args.length < 3)
throw new CommandAnswerException("/rscp promote <player> <ladder>");
ladderHelper.executePromotion(sender, args[1], args[2], true);
return;
case "demote":
/* rscp demote <user> <ladder> */
if(args.length < 3)
throw new CommandAnswerException("/rscp demote <player> <ladder>");
ladderHelper.executePromotion(sender, args[1], args[2], false);
return;
case "lock": case "lock":
/* rscp lock [mMode] */ /* rscp lock [mMode] */
if(sender.hasPermission("rscp.lock")) if(sender.hasPermission("rscp.lock"))
@ -138,7 +104,6 @@ public class CommandHelper
"Entities: {MAGENTA}" + Integer.toString(importer_pex.getEntities().length), "Entities: {MAGENTA}" + Integer.toString(importer_pex.getEntities().length),
"Permissions: {MAGENTA}" + Integer.toString(importer_pex.getPermissions().length), "Permissions: {MAGENTA}" + Integer.toString(importer_pex.getPermissions().length),
"Inheritance: {MAGENTA}" + Integer.toString(importer_pex.getInheritance().length), "Inheritance: {MAGENTA}" + Integer.toString(importer_pex.getInheritance().length),
"Ladders: {MAGENTA}" + Integer.toString(importer_pex.getLadders().length),
"{_DR}{_B}FAKE :p - all this is undone yet!", "{_DR}{_B}FAKE :p - all this is undone yet!",
}); });
case "pex-sql": case "pex-sql":
@ -320,20 +285,4 @@ public class CommandHelper
throw new CommandAnswerException(list); throw new CommandAnswerException(list);
} }
} }
private void onCommandHubLadder(CommandSender sender, String[] args) throws CommandAnswerException
{
if(sender.hasPermission("rscp.admin") == false)
throw new CommandAnswerException("Not enough permissions.");
final String[] help = new String[]
{
"rscPermissions command hub (ladder section).",
"{MAGENTA}Usage:",
// "/rscp ladder <ladder> list groups",
// "/rscp ladder <ladder> list users",
};
if(args.length < 3)
throw new CommandAnswerException(help);
final String ladder = args[1];
throw new CommandAnswerException("dummy :p)");
}
} }

6
src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java

@ -8,7 +8,7 @@ import ru.simsonic.utilities.ConnectionMySQL;
public class ConnectionHelper extends BackendMySQL public class ConnectionHelper extends BackendMySQL
{ {
private ConnectionHelper nextInChain = null; private ConnectionHelper nextInChain = null;
public ConnectionHelper(MainPluginClass rscp, ConnectionHelper nextInChain) public ConnectionHelper(BukkitPluginMain rscp, ConnectionHelper nextInChain)
{ {
super(rscp); super(rscp);
this.nextInChain = nextInChain; this.nextInChain = nextInChain;
@ -60,7 +60,7 @@ public class ConnectionHelper extends BackendMySQL
syncTask.wait(); syncTask.wait();
} }
} catch(InterruptedException ex) { } catch(InterruptedException ex) {
MainPluginClass.consoleLog.log(Level.SEVERE, "[rscp] Exception in FetchTables(): {0}", ex); BukkitPluginMain.consoleLog.log(Level.SEVERE, "[rscp] Exception in FetchTables(): {0}", ex);
} }
// plugin.cache.calculateStartupPermissions(); // plugin.cache.calculateStartupPermissions();
} }
@ -118,7 +118,7 @@ public class ConnectionHelper extends BackendMySQL
} }
}); });
} catch(InterruptedException ex) { } catch(InterruptedException ex) {
MainPluginClass.consoleLog.log(Level.SEVERE, "[rscp] Exception in MigrateFromPExSQL(): {0}", ex); BukkitPluginMain.consoleLog.log(Level.SEVERE, "[rscp] Exception in MigrateFromPExSQL(): {0}", ex);
} }
} }
}; };

2
src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java

@ -5,7 +5,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
import ru.simsonic.rscPermissions.Settings; import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.utilities.LanguageUtility; import ru.simsonic.utilities.LanguageUtility;
public class Destination public class Destination

2
src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java

@ -1,6 +1,6 @@
package ru.simsonic.rscPermissions.DataTypes; package ru.simsonic.rscPermissions.DataTypes;
import java.util.Arrays; import java.util.Arrays;
import ru.simsonic.rscPermissions.Settings; import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.utilities.LanguageUtility; import ru.simsonic.utilities.LanguageUtility;
public class RowInheritance extends ConditionalRow implements Comparable<RowInheritance> public class RowInheritance extends ConditionalRow implements Comparable<RowInheritance>

44
src/main/java/ru/simsonic/rscPermissions/DataTypes/RowLadder.java

@ -1,44 +0,0 @@
package ru.simsonic.rscPermissions.DataTypes;
public class RowLadder extends AbstractRow implements Comparable<RowLadder>
{
public String climber;
public EntityType climberType;
public String ladder;
public String instance;
public int rank;
@Override
public int compareTo(RowLadder t)
{
return rank - t.rank;
}
public RowLadder nextNode;
public RowLadder prevNode;
public int getLadderTopRank()
{
int result = rank;
for(RowLadder row = nextNode; row != null; row = nextNode)
result = row.rank;
return result;
}
public int getLadderBottomRank()
{
int result = rank;
for(RowLadder row = prevNode; row != null; row = prevNode)
result = row.rank;
return result;
}
public RowLadder getActualNode(int userRank)
{
RowLadder result = this;
for(; result.nextNode != null; result = result.nextNode)
if(result.nextNode.rank > userRank)
break;
return result;
}
@Override
public Table getTable()
{
return Table.ladders;
}
}

6
src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java

@ -2,7 +2,6 @@ package ru.simsonic.rscPermissions.Importers;
import java.util.ArrayList; import java.util.ArrayList;
import ru.simsonic.rscPermissions.DataTypes.RowEntity; import ru.simsonic.rscPermissions.DataTypes.RowEntity;
import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowLadder;
import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.DataTypes.RowPermission;
public abstract class BaseImporter public abstract class BaseImporter
@ -10,7 +9,6 @@ public abstract class BaseImporter
protected ArrayList<RowEntity> imported_e = new ArrayList<>(); protected ArrayList<RowEntity> imported_e = new ArrayList<>();
protected ArrayList<RowPermission> imported_p = new ArrayList<>(); protected ArrayList<RowPermission> imported_p = new ArrayList<>();
protected ArrayList<RowInheritance> imported_i = new ArrayList<>(); protected ArrayList<RowInheritance> imported_i = new ArrayList<>();
protected ArrayList<RowLadder> imported_l = new ArrayList<>();
public RowEntity[] getEntities() public RowEntity[] getEntities()
{ {
return imported_e.toArray(new RowEntity[imported_e.size()]); return imported_e.toArray(new RowEntity[imported_e.size()]);
@ -23,8 +21,4 @@ public abstract class BaseImporter
{ {
return imported_i.toArray(new RowInheritance[imported_i.size()]); return imported_i.toArray(new RowInheritance[imported_i.size()]);
} }
public RowLadder[] getLadders()
{
return imported_l.toArray(new RowLadder[imported_l.size()]);
}
} }

2
src/main/java/ru/simsonic/rscPermissions/InternalCache/AbstractPermissionsCache.java

@ -1,7 +1,6 @@
package ru.simsonic.rscPermissions.InternalCache; package ru.simsonic.rscPermissions.InternalCache;
import ru.simsonic.rscPermissions.DataTypes.RowEntity; import ru.simsonic.rscPermissions.DataTypes.RowEntity;
import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowLadder;
import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.DataTypes.RowPermission;
public interface AbstractPermissionsCache public interface AbstractPermissionsCache
@ -9,5 +8,4 @@ public interface AbstractPermissionsCache
public int ImportEntities(RowEntity[] rows); public int ImportEntities(RowEntity[] rows);
public int ImportPermissions(RowPermission[] rows); public int ImportPermissions(RowPermission[] rows);
public int ImportInheritance(RowInheritance[] rows); public int ImportInheritance(RowInheritance[] rows);
public int ImportLadders(RowLadder[] rows);
} }

27
src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java

@ -8,15 +8,14 @@ import org.bukkit.entity.Player;
import ru.simsonic.rscPermissions.DataTypes.EntityType; import ru.simsonic.rscPermissions.DataTypes.EntityType;
import ru.simsonic.rscPermissions.DataTypes.RowEntity; import ru.simsonic.rscPermissions.DataTypes.RowEntity;
import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowLadder;
import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.MainPluginClass; import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Settings; import ru.simsonic.rscPermissions.API.Settings;
public class BrandNewCache implements AbstractPermissionsCache public class BrandNewCache implements AbstractPermissionsCache
{ {
protected final MainPluginClass plugin; protected final BukkitPluginMain plugin;
public BrandNewCache(MainPluginClass rscp) public BrandNewCache(BukkitPluginMain rscp)
{ {
this.plugin = rscp; this.plugin = rscp;
} }
@ -32,8 +31,6 @@ public class BrandNewCache implements AbstractPermissionsCache
protected final ArrayList<RowPermission> permissions_p2u = new ArrayList<>(); protected final ArrayList<RowPermission> permissions_p2u = new ArrayList<>();
protected final ArrayList<RowInheritance> inheritance_g2g = new ArrayList<>(); protected final ArrayList<RowInheritance> inheritance_g2g = new ArrayList<>();
protected final ArrayList<RowInheritance> inheritance_g2u = new ArrayList<>(); protected final ArrayList<RowInheritance> inheritance_g2u = new ArrayList<>();
protected final ArrayList<RowLadder> ladders_g = new ArrayList<>();
protected final ArrayList<RowLadder> ladders_u = new ArrayList<>();
public static class InheritanceLeaf implements Comparable<InheritanceLeaf> public static class InheritanceLeaf implements Comparable<InheritanceLeaf>
{ {
public RowInheritance node; public RowInheritance node;
@ -282,20 +279,4 @@ public class BrandNewCache implements AbstractPermissionsCache
} }
return inheritance_g2g.size() + inheritance_g2u.size(); return inheritance_g2g.size() + inheritance_g2u.size();
} }
@Override
public synchronized int ImportLadders(RowLadder[] rows)
{
ladders_g.clear();
ladders_u.clear();
if(rows == null)
return 0;
for(RowLadder row : rows)
{
if(row.climberType == EntityType.group)
ladders_g.add(row);
else
ladders_u.add(row);
}
return ladders_g.size() + ladders_u.size();
}
} }

24
src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheData.java

@ -5,13 +5,12 @@ import java.util.concurrent.ConcurrentHashMap;
import ru.simsonic.rscPermissions.DataTypes.EntityType; import ru.simsonic.rscPermissions.DataTypes.EntityType;
import ru.simsonic.rscPermissions.DataTypes.RowEntity; import ru.simsonic.rscPermissions.DataTypes.RowEntity;
import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowLadder;
import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.MainPluginClass; import ru.simsonic.rscPermissions.BukkitPluginMain;
public class LocalCacheData public class LocalCacheData
{ {
protected final MainPluginClass plugin; protected final BukkitPluginMain plugin;
protected final HashMap<String, RowEntity> entities_g = new HashMap<>(); protected final HashMap<String, RowEntity> entities_g = new HashMap<>();
protected final HashMap<String, RowEntity> entities_u = new HashMap<>(); protected final HashMap<String, RowEntity> entities_u = new HashMap<>();
protected final ConcurrentHashMap<String, String> prefixes_u = new ConcurrentHashMap<>(); protected final ConcurrentHashMap<String, String> prefixes_u = new ConcurrentHashMap<>();
@ -20,9 +19,7 @@ public class LocalCacheData
protected final ArrayList<RowPermission> permissions_p2u = new ArrayList<>(); protected final ArrayList<RowPermission> permissions_p2u = new ArrayList<>();
protected final ArrayList<RowInheritance> inheritance_g2g = new ArrayList<>(); protected final ArrayList<RowInheritance> inheritance_g2g = new ArrayList<>();
protected final ArrayList<RowInheritance> inheritance_g2u = new ArrayList<>(); protected final ArrayList<RowInheritance> inheritance_g2u = new ArrayList<>();
protected final ArrayList<RowLadder> ladders_g = new ArrayList<>(); protected LocalCacheData(BukkitPluginMain rscp)
protected final ArrayList<RowLadder> ladders_u = new ArrayList<>();
protected LocalCacheData(MainPluginClass rscp)
{ {
this.plugin = rscp; this.plugin = rscp;
} }
@ -71,19 +68,4 @@ public class LocalCacheData
} }
return inheritance_g2g.size() + inheritance_g2u.size(); return inheritance_g2g.size() + inheritance_g2u.size();
} }
public synchronized int ImportLadders(RowLadder[] rows)
{
ladders_g.clear();
ladders_u.clear();
if(rows == null)
return 0;
for(RowLadder row : rows)
{
if(row.climberType == EntityType.group)
ladders_g.add(row);
else
ladders_u.add(row);
}
return ladders_g.size() + ladders_u.size();
}
} }

41
src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java

@ -5,14 +5,13 @@ import java.util.HashSet;
import java.util.Set; import java.util.Set;
import ru.simsonic.rscPermissions.DataTypes.RowEntity; import ru.simsonic.rscPermissions.DataTypes.RowEntity;
import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowLadder;
import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.MainPluginClass; import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Settings; import ru.simsonic.rscPermissions.API.Settings;
public class LocalCacheFunctions extends LocalCacheTree public class LocalCacheFunctions extends LocalCacheTree
{ {
public LocalCacheFunctions(MainPluginClass rscp) public LocalCacheFunctions(BukkitPluginMain rscp)
{ {
super(rscp); super(rscp);
} }
@ -38,37 +37,6 @@ public class LocalCacheFunctions extends LocalCacheTree
RowEntity entity = entities_g.get(group.toLowerCase()); RowEntity entity = entities_g.get(group.toLowerCase());
return (entity != null) ? entity.suffix : null; return (entity != null) ? entity.suffix : null;
} }
public synchronized ArrayList<RowLadder> buildLadderTemplate(String ladder)
{
final ArrayList<RowLadder> result = new ArrayList<>();
RowLadder prev = null;
for(RowLadder row : ladders_g)
if(row.ladder.equalsIgnoreCase(ladder))
{
if(prev != null)
{
prev.nextNode = row;
row.prevNode = prev;
}
result.add(row);
prev = row;
}
Collections.sort(result);
return result;
}
public synchronized int getUserRank(String user, String ladder, String instance)
{
for(RowLadder row : ladders_u)
if(row.climber.equalsIgnoreCase(user) && row.ladder.equalsIgnoreCase(ladder))
if(instance == null || "".equals(instance))
{
if(row.instance == null || "".equals(row.instance))
return row.rank;
} else
if(instance.equalsIgnoreCase(row.instance))
return row.rank;
return 0;
}
public synchronized ArrayList<String> getUserGroups(String player) public synchronized ArrayList<String> getUserGroups(String player)
{ {
final ArrayList<ResolutionLeaf> tree = mapTrees.get(player.toLowerCase()); final ArrayList<ResolutionLeaf> tree = mapTrees.get(player.toLowerCase());
@ -93,9 +61,6 @@ public class LocalCacheFunctions extends LocalCacheTree
} }
for(RowInheritance row : inheritance_g2u) for(RowInheritance row : inheritance_g2u)
result.add(row.parent.toLowerCase()); result.add(row.parent.toLowerCase());
for(RowLadder row : ladders_g)
if(row.climber != null)
result.add(row.climber.toLowerCase());
return result; return result;
} }
} }

11
src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java

@ -8,10 +8,9 @@ import java.util.concurrent.ConcurrentHashMap;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import ru.simsonic.rscPermissions.DataTypes.RowEntity; import ru.simsonic.rscPermissions.DataTypes.RowEntity;
import ru.simsonic.rscPermissions.DataTypes.RowInheritance; import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowLadder;
import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.MainPluginClass; import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Settings; import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.utilities.LanguageUtility; import ru.simsonic.utilities.LanguageUtility;
public class LocalCacheTree extends LocalCacheData public class LocalCacheTree extends LocalCacheData
@ -22,7 +21,7 @@ public class LocalCacheTree extends LocalCacheData
public String instance; public String instance;
public RowInheritance row; public RowInheritance row;
} }
protected LocalCacheTree(MainPluginClass rscp) protected LocalCacheTree(BukkitPluginMain rscp)
{ {
super(rscp); super(rscp);
} }
@ -46,8 +45,6 @@ public class LocalCacheTree extends LocalCacheData
permissions_p2u.clear(); permissions_p2u.clear();
inheritance_g2g.clear(); inheritance_g2g.clear();
inheritance_g2u.clear(); inheritance_g2u.clear();
ladders_g.clear();
ladders_u.clear();
} }
public synchronized void calculateStartupPermissions() public synchronized void calculateStartupPermissions()
{ {
@ -60,8 +57,6 @@ public class LocalCacheTree extends LocalCacheData
playerEntities.add(row.entity); playerEntities.add(row.entity);
for(RowInheritance row : inheritance_g2u) for(RowInheritance row : inheritance_g2u)
playerEntities.add(row.entity); playerEntities.add(row.entity);
for(RowLadder row : ladders_u)
playerEntities.add(row.climber);
// Recalculate // Recalculate
for(String entityNameOrUUID : playerEntities) for(String entityNameOrUUID : playerEntities)
calculateBasePermissions(entityNameOrUUID); calculateBasePermissions(entityNameOrUUID);

123
src/main/java/ru/simsonic/rscPermissions/Ladders.java

@ -1,123 +0,0 @@
package ru.simsonic.rscPermissions;
import java.util.ArrayList;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import ru.simsonic.rscPermissions.Backends.BackendMySQL;
import ru.simsonic.rscPermissions.DataTypes.RowLadder;
public class Ladders
{
private final MainPluginClass plugin;
public Ladders(MainPluginClass rscp)
{
this.plugin = rscp;
}
public String[] executePromotion(CommandSender sender, String user, String ladder, boolean bPromote)
{
if(plugin.connectionList == null)
return null;
final BackendMySQL connection = plugin.connectionList.findConnectedNode();
if(connection == null || !connection.canWrite())
return null;
if("".equals(user) || (user == null))
return new String[] { (bPromote ? "/promote" : "/demote") + " <user> <ladder>" };
if("".equals(ladder) || (ladder == null))
return new String[] { "You should specify ladder to promote on." };
final Player player = plugin.getServer().getPlayerExact(user);
if(player == null)
return new String[] { "Player must be online." };
String template = ladder;
String instance = "";
String[] breaked = ladder.split(Settings.separatorRegExp);
if(breaked.length == 2)
{
template = breaked[0].toLowerCase();
instance = breaked[1];
}
final String perm_onself = bPromote ? "rscp.promote-self." : "rscp.demote-self.";
final String perm_sender = bPromote ? "rscp.promote." : "rscp.demote.";
final String perm_target = bPromote ? "rscp.promotable." : "rscp.demotable.";
boolean bOS = sender.hasPermission(perm_onself + "*");
boolean bSP = sender.hasPermission(perm_sender + "*");
boolean bUP = player.hasPermission(perm_target + "*");
if(!"".equals(instance))
{
bOS = bOS || sender.hasPermission(perm_onself + template + ".*");
bOS = bOS || sender.hasPermission(perm_onself + template + "." + instance.toLowerCase());
bSP = bSP || sender.hasPermission(perm_sender + template + ".*");
bSP = bSP || sender.hasPermission(perm_sender + template + "." + instance.toLowerCase());
bUP = bUP || player.hasPermission(perm_target + template + ".*");
bUP = bUP || player.hasPermission(perm_target + template + "." + instance.toLowerCase());
} else {
bOS = bOS || sender.hasPermission(perm_onself + template);
bSP = bSP || sender.hasPermission(perm_sender + template);
bUP = bUP || player.hasPermission(perm_target + template);
}
if(sender instanceof Player)
if(player != (Player)sender)
bOS = false;
boolean bPromotionAllowed = bOS || (bSP && bUP) || sender.hasPermission("rscp.admin.promote");
if(bPromotionAllowed == false)
{
if(bSP == false)
return new String[] { "You are not allowed to promote/demote on this ladder." };
if(bUP == false)
return new String[] { "Player is not promotable on this ladder." };
}
/*
int rank = plugin.cache2.getUserRank(user, template, instance);
final ArrayList<RowLadder> ladderArray = plugin.cache.buildLadderTemplate(template);
if(ladderArray.isEmpty())
return new String[] { "There is no such ladder." };
RowLadder position = ladderArray.get(0).getActualNode(rank);
if(bPromote)
{
if(position.nextNode != null)
position = position.nextNode;
} else
if(position.prevNode != null)
position = position.prevNode;
if(position.instance != null)
if(Settings.instantiator.equals(position.instance))
{
if("".equals(instance))
return new String[] { "Operation requires ladder instance (<template>.<instance>)." };
} else
instance = ("".equals(position.instance) ? null : position.instance);
else
instance = null;
ladder = position.ladder + ((instance != null) ? "." + instance : "");
connection.dropUserFromLadder(user, ladder);
connection.setUserRank(user, ladder, position.rank);
final String parent = position.climber + ((instance != null) ? "." + instance : "");
if(position.climber != null)
connection.addUserParentGroup(user, parent);
connection.fetchIntoCache(plugin.cache);
plugin.cache.calculatePlayerPermissions(player);
final String resultP = "{GOLD}You have been " +
((position.climber != null) ?
(
(bPromote ? "promoted" : "demoted") + " to the group {_LS}" +
position.climber + ((instance != null) ? " {_DS}(" + instance + ") " : "") +
"{GOLD}on"
) : "removed from"
) + " the ladder {_LG}" + position.ladder + ((instance != null) ? "{_DS}(" + instance + ")" : "") + "{GOLD} by " +
(
(sender instanceof Player) ?
((player == (Player)sender) ? "yourself" : "{_YL}" + sender.getName())
: "server"
) + "{GOLD}.";
final String resultS = "{GOLD}User {_YL}" + player.getName() + " {GOLD}has been " +
((position.climber != null) ?
(
(bPromote ? "promoted" : "demoted") + " to the group {_LS}" +
position.climber + ((instance != null) ? "{_DS}(" + instance + ") " : "") +
"{GOLD}on"
) : "removed from"
) + " the ladder {_LG}" + position.ladder + ((instance != null) ? "{_DS}(" + instance + ")" : "") + "{GOLD}.";
plugin.formattedMessage(player, resultP);
return new String [] { resultS };
*/
return new String[] { "Function is temporary unavailable." };
}
}

4
src/main/java/ru/simsonic/rscPermissions/MaintenanceMode.java

@ -10,8 +10,8 @@ import ru.simsonic.utilities.LanguageUtility;
public class MaintenanceMode implements Listener public class MaintenanceMode implements Listener
{ {
private final MainPluginClass plugin; private final BukkitPluginMain plugin;
public MaintenanceMode(MainPluginClass rscp) public MaintenanceMode(BukkitPluginMain rscp)
{ {
this.plugin = rscp; this.plugin = rscp;
} }

12
src/main/java/ru/simsonic/rscPermissions/RegionListProviders.java

@ -19,13 +19,13 @@ import org.bukkit.plugin.Plugin;
public final class RegionListProviders public final class RegionListProviders
{ {
private final MainPluginClass plugin; private final BukkitPluginMain plugin;
private Plugin worldguard; private Plugin worldguard;
private Plugin residence; private Plugin residence;
private final Map<Player, Set<String>> regionsByPlayer = new HashMap<>(); private final Map<Player, Set<String>> regionsByPlayer = new HashMap<>();
private final Map<Player, Integer> playerRegionHashes = new HashMap<>(); private final Map<Player, Integer> playerRegionHashes = new HashMap<>();
private final Map<Player, World> playerLastWorld = new HashMap<>(); private final Map<Player, World> playerLastWorld = new HashMap<>();
public RegionListProviders(MainPluginClass rscp) public RegionListProviders(BukkitPluginMain rscp)
{ {
this.plugin = rscp; this.plugin = rscp;
} }
@ -38,10 +38,10 @@ public final class RegionListProviders
if((pluginWG != null) && (pluginWG instanceof WorldGuardPlugin)) if((pluginWG != null) && (pluginWG instanceof WorldGuardPlugin))
{ {
this.worldguard = pluginWG; this.worldguard = pluginWG;
MainPluginClass.consoleLog.info("[rscp] WorldGuard was found and integrated."); BukkitPluginMain.consoleLog.info("[rscp] WorldGuard was found and integrated.");
} else { } else {
this.worldguard = null; this.worldguard = null;
MainPluginClass.consoleLog.info("[rscp] WorldGuard was not found."); BukkitPluginMain.consoleLog.info("[rscp] WorldGuard was not found.");
} }
} else } else
this.worldguard = null; this.worldguard = null;
@ -52,10 +52,10 @@ public final class RegionListProviders
if((pluginR != null) && (pluginR instanceof Residence)) if((pluginR != null) && (pluginR instanceof Residence))
{ {
this.residence = pluginR; this.residence = pluginR;
MainPluginClass.consoleLog.info("[rscp] Residence was found and integrated."); BukkitPluginMain.consoleLog.info("[rscp] Residence was found and integrated.");
} else { } else {
this.residence = null; this.residence = null;
MainPluginClass.consoleLog.info("[rscp] Residence was not found."); BukkitPluginMain.consoleLog.info("[rscp] Residence was not found.");
} }
} else } else
this.residence = null; this.residence = null;

6
src/main/java/ru/simsonic/rscPermissions/RegionUpdateObserver.java

@ -7,10 +7,10 @@ public class RegionUpdateObserver implements Runnable
{ {
private static final long granularityMin = 20; private static final long granularityMin = 20;
private static final long granularityMax = 10000; private static final long granularityMax = 10000;
private final MainPluginClass rscp; private final BukkitPluginMain rscp;
private final MovingPlayersCatcher movedPlayers = new MovingPlayersCatcher(); private final MovingPlayersCatcher movedPlayers = new MovingPlayersCatcher();
private Thread thread; private Thread thread;
RegionUpdateObserver(MainPluginClass rscp) RegionUpdateObserver(BukkitPluginMain rscp)
{ {
this.rscp = rscp; this.rscp = rscp;
} }
@ -35,7 +35,7 @@ public class RegionUpdateObserver implements Runnable
thread.interrupt(); thread.interrupt();
thread.join(); thread.join();
} catch(InterruptedException ex) { } catch(InterruptedException ex) {
MainPluginClass.consoleLog.log(Level.SEVERE, "[rscp] Exception in RegionUpdateObserver: {0}", ex); BukkitPluginMain.consoleLog.log(Level.SEVERE, "[rscp] Exception in RegionUpdateObserver: {0}", ex);
} }
} }
thread = null; thread = null;

27
src/main/java/ru/simsonic/rscPermissions/SpongePluginMain.java

@ -0,0 +1,27 @@
package ru.simsonic.rscPermissions;
import org.spongepowered.api.event.state.ServerAboutToStartEvent;
import org.spongepowered.api.event.state.ServerStartedEvent;
import org.spongepowered.api.event.state.ServerStartingEvent;
import org.spongepowered.api.event.state.ServerStoppedEvent;
import org.spongepowered.api.event.state.ServerStoppingEvent;
import org.spongepowered.api.plugin.Plugin;
@Plugin(id = "rscPermissions", name = "rscPermissions", version = "0.9.0b")
public class SpongePluginMain
{
public void onServerStart(ServerAboutToStartEvent event)
{
}
public void onServerStarting(ServerStartingEvent event)
{
}
public void onServerStarted(ServerStartedEvent event)
{
}
public void onServerStopping(ServerStoppingEvent event)
{
}
public void onServerStopped(ServerStoppedEvent event)
{
}
}

12
src/main/resources/plugin.yml

@ -1,8 +1,8 @@
name: ${project.artifactId} name: ${project.artifactId}
version: ${project.version} version: ${project.version}
main: ${project.groupId}.${project.artifactId}.MainPluginClass main: ${project.groupId}.${project.artifactId}.BukkitPluginMain
author: SimSonic author: SimSonic
website: http://dev.bukkit.org/server-mods/rscPermissions website: ${project.url}
softdepend: softdepend:
- Vault - Vault
- WorldEdit - WorldEdit
@ -11,10 +11,6 @@ softdepend:
commands: commands:
rscp: rscp:
description: rscPermissions command hub description: rscPermissions command hub
promote:
description: Promotes player on ladder
demote:
description: Demotes player on ladder
permissions: permissions:
rscp.*: rscp.*:
description: Gives access to all commands description: Gives access to all commands
@ -25,13 +21,9 @@ permissions:
description: Allows you to use all /rscp subcommands description: Allows you to use all /rscp subcommands
default: op default: op
children: children:
rscp.admin.promote: true
rscp.admin.lock: true rscp.admin.lock: true
rscp.admin.reload: true rscp.admin.reload: true
rscp.maintenance.*: true rscp.maintenance.*: true
rscp.admin.promote:
description: Allows to promote/demote users on ladders
default: op
rscp.admin.lock: rscp.admin.lock:
description: Allows to enable/disable maintenance modes description: Allows to enable/disable maintenance modes
default: op default: op

14
src/main/resources/sqlt/Drop_user_from_ladder.sqlt

@ -1,14 +0,0 @@
DELETE FROM
`{DATABASE}`.`{PREFIX}inheritance`
WHERE
`entity` = '{USER}' AND `inheritance_type` = b'1'
AND
`parent` IN (
SELECT `climber`
FROM `{DATABASE}`.`{PREFIX}ladders`
WHERE `ladder` = '{LADDER}' AND `climber_type` = b'0'
UNION
SELECT CONCAT(`climber`, '.', '{INSTANCE}') as `climber`
FROM `{DATABASE}`.`{PREFIX}ladders`
WHERE `ladder` = '{LADDER}.?' AND `climber_type` = b'0'
);

17
src/main/resources/sqlt/Initialize_main_v1.sqlt

@ -38,17 +38,6 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}inheritance` (
UNIQUE KEY `inheritance_UNIQUE` (`entity`, `parent`, `inheritance_type`, `destination`, `expirience`) 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 CHARSET='utf8' COLLATE 'utf8_general_ci';
CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}ladders` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`climber` VARCHAR(64) NOT NULL,
`climber_type` TINYINT(1) NOT NULL DEFAULT b'0',
`ladder` VARCHAR(32) NOT NULL,
`rank` SMALLINT(6) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `climber_UNIQUE` (`climber`, `climber_type`, `ladder`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci';
CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}servers` ( CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}servers` (
`serverid` VARCHAR(48) NOT NULL, `serverid` VARCHAR(48) NOT NULL,
`plugin_version` VARCHAR(16) DEFAULT NULL, `plugin_version` VARCHAR(16) DEFAULT NULL,
@ -80,12 +69,6 @@ ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}inheritance`
DROP PRIMARY KEY, ADD PRIMARY KEY (`id`), DROP PRIMARY KEY, ADD PRIMARY KEY (`id`),
COLLATE 'utf8_general_ci'; COLLATE 'utf8_general_ci';
ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}ladders`
CHANGE COLUMN `climber` `climber` VARCHAR(64) NOT NULL,
DROP INDEX `climber_UNIQUE`,
ADD UNIQUE INDEX `climber_UNIQUE` (`climber` ASC, `climber_type` ASC, `ladder` ASC),
COLLATE 'utf8_general_ci';
ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}servers` ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}servers`
COLLATE 'utf8_general_ci'; COLLATE 'utf8_general_ci';

11
src/main/resources/sqlt/Insert_example_rows_v1.sqlt

@ -43,14 +43,3 @@ INSERT INTO
VALUES VALUES
('testplayer', 'rpgTramps', b'1', '@RPG', NULL), ('testplayer', 'rpgTramps', b'1', '@RPG', NULL),
('testplayer', 'Donators1Month', b'1', '', TIMESTAMPADD(MONTH, 1, NOW())); ('testplayer', 'Donators1Month', b'1', '', TIMESTAMPADD(MONTH, 1, NOW()));
INSERT INTO
`{DATABASE}`.`{PREFIX}ladders`
(`climber`, `climber_type`, `ladder`, `rank`)
VALUES
('rpgOutcasts', b'0', 'City', '0'),
('rpgTramps', b'0', 'City.?', '200'),
('rpgCitizens', b'0', 'City.?', '400'),
('rpgElites', b'0', 'City.?', '600'),
('rpgHeads', b'0', 'City.?', '800'),
('testplayer', b'1', 'City.Zion', '200');

7
src/main/resources/sqlt/Set_user_rank.sqlt

@ -1,7 +0,0 @@
INSERT INTO
`{DATABASE}`.`{PREFIX}ladders`
(`climber`, `climber_type`, `ladder`, `rank`)
VALUES
('{USER}', b'1', '{LADDER}', '{RANK}')
ON DUPLICATE KEY UPDATE
`rank` = VALUES(`rank`);
Loading…
Cancel
Save