Browse Source

* Json backend reading .jsons.

* Maintenance moved to Bukkit impl.
* Removed a little bit of code which is now reused from rscUtilityLibrary.
* Started localization coding (en/ru).
* Other things.
master
Stanislav Usenkov 10 years ago
parent
commit
489deac611
  1. 42
      pom.xml
  2. 2
      src/main/java/ru/simsonic/rscPermissions/API/Settings.java
  3. 29
      src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java
  4. 7
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java
  5. 33
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissions.java
  6. 3
      src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
  7. 2
      src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java
  8. 23
      src/main/java/ru/simsonic/rscPermissions/DataTypes/CommandHelperAnswerException.java
  9. 51
      src/main/java/ru/simsonic/rscPermissions/Phrases.java
  10. 30
      src/main/java/ru/simsonic/rscPermissions/RegionUpdateObserver.java
  11. 14
      src/main/resources/config.yml
  12. 0
      src/main/resources/languages/english.yml
  13. 0
      src/main/resources/languages/russian.yml
  14. 8
      src/main/resources/plugin.yml

42
pom.xml

@ -4,21 +4,21 @@
<groupId>ru.simsonic</groupId>
<artifactId>rscPermissions</artifactId>
<version>0.9.1a</version>
<version>0.9.2a</version>
<packaging>jar</packaging>
<name>rscPermissions</name>
<url>https://github.com/SimSonic/rscPermissions</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>
<url>http://repo.spongepowered.org/Sponge/maven/</url>
</repository>
<repository>
<id>bukkit-repo</id>
<url>http://repo.bukkit.org/content/groups/public</url>
<url>http://repo.bukkit.org/content/groups/public/</url>
</repository>
<repository>
<id>spigot-repo</id>
@ -32,7 +32,7 @@
<!-- VaultAPI -->
<repository>
<id>vault-repo</id>
<url>http://nexus.theyeticave.net/content/repositories/pub_releases</url>
<url>http://nexus.theyeticave.net/content/repositories/pub_releases/</url>
</repository>
<!-- Region list providers: WorldGuard, Residence -->
<repository>
@ -58,21 +58,21 @@
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
<scope>compile</scope>
</dependency>
<!-- В первую очередь плагин создан под платформу Bukkit (Spigot) -->
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>1.7.9-R0.2</version>
<version>1.8-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- В связи с появлением Sponge API, разработка будет вестись и под него -->
<dependency>
<groupId>org.spongepowered</groupId>
<artifactId>spongeapi</artifactId>
<version>1.0</version>
<scope>provided</scope>
<groupId>ru.simsonic</groupId>
<artifactId>rscUtilityLibrary</artifactId>
<version>2.0.1</version>
<scope>compile</scope>
<type>jar</type>
</dependency>
<!-- Статистика использование плагинов -->
<dependency>
@ -107,13 +107,12 @@
<version>3.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- Какие-то временные изыски Reality_SC, в будущем уберуться -->
<!-- В связи с появлением Sponge API, разработка будет вестись и под него -->
<dependency>
<groupId>ru.simsonic</groupId>
<artifactId>rscUtilityLibrary</artifactId>
<version>2.0.0</version>
<scope>compile</scope>
<type>jar</type>
<groupId>org.spongepowered</groupId>
<artifactId>spongeapi</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
@ -164,14 +163,19 @@
<createDependencyReducedPom>false</createDependencyReducedPom>
<artifactSet>
<includes>
<include>com.google.code.gson:gson</include>
<include>ru.simsonic:rscUtilityLibrary</include>
<include>org.mcstats.bukkit:metrics-lite</include>
</includes>
</artifactSet>
<relocations>
<relocation>
<pattern>com.google.gson</pattern>
<shadedPattern>${project.groupId}.${project.artifactId}.com-google-gson-shaded</shadedPattern>
</relocation>
<relocation>
<pattern>ru.simsonic.rscUtilityLibrary</pattern>
<shadedPattern>ru.simsonic.rscPermissions.rscUtilityLibraryShaded</shadedPattern>
<shadedPattern>${project.groupId}.${project.artifactId}.ru-simsonic-rscUtilityLibrary-shaded</shadedPattern>
</relocation>
</relocations>
</configuration>

2
src/main/java/ru/simsonic/rscPermissions/API/Settings.java

@ -17,7 +17,7 @@ public interface Settings
public boolean isUseResidence();
public boolean isUseWorldGuard();
public long getRegionFinderGranularity();
public ConnectionHelper getConnectionChain();
public int getAutoReloadDelayTicks();
public boolean isUseMetrics();
public ConnectionHelper getConnectionChain();
}

29
src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java

@ -1,5 +1,11 @@
package ru.simsonic.rscPermissions.Backends;
import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import ru.simsonic.rscPermissions.DataTypes.RowEntity;
import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowPermission;
@ -8,20 +14,41 @@ public class BackendJson
{
private final static String localEntitiesFile = "entities.json";
private final static String localPermissionsFile = "permissions.json";
private final static String localInheritanceFile = "inheritance.json";
private final static String localInheritanceFile = "inheritance.json";
public RowEntity[] fetchEntities()
{
final Gson gson = new Gson();
try
{
JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream(
new File(localEntitiesFile)), Charset.forName("UTF-8")));
return gson.fromJson(jr, RowEntity[].class);
} catch(FileNotFoundException ex) {
}
return null;
}
public RowPermission[] fetchPermissions()
{
final Gson gson = new Gson();
try
{
JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream(
new File(localEntitiesFile)), Charset.forName("UTF-8")));
return gson.fromJson(jr, RowPermission[].class);
} catch(FileNotFoundException ex) {
}
return null;
}
public RowInheritance[] fetchInheritance()
{
final Gson gson = new Gson();
try
{
JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream(
new File(localEntitiesFile)), Charset.forName("UTF-8")));
return gson.fromJson(jr, RowInheritance[].class);
} catch(FileNotFoundException ex) {
}
return null;
}
}

7
src/main/java/ru/simsonic/rscPermissions/MaintenanceMode.java → src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java

@ -1,4 +1,4 @@
package ru.simsonic.rscPermissions;
package ru.simsonic.rscPermissions.Bukkit;
import java.util.HashMap;
import java.util.UUID;
import org.bukkit.Bukkit;
@ -6,12 +6,13 @@ import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
import org.bukkit.event.server.ServerListPingEvent;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
public class MaintenanceMode implements Listener
public class BukkitMaintenance implements Listener
{
private final BukkitPluginMain plugin;
public MaintenanceMode(BukkitPluginMain rscp)
public BukkitMaintenance(BukkitPluginMain rscp)
{
this.plugin = rscp;
}

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

@ -1,22 +1,20 @@
package ru.simsonic.rscPermissions.Bukkit;
import java.util.Arrays;
import java.util.HashMap;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.logging.Level;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment;
import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.InternalCache.BrandNewCache;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscUtilityLibrary.RestartableThread;
public class BukkitPermissions implements Runnable
public class BukkitPermissions extends RestartableThread
{
private final BukkitPluginMain rscp;
public BukkitPermissions(BukkitPluginMain plugin)
{
this.rscp = plugin;
}
private Thread thread;
private final LinkedBlockingQueue<Player> updateQueue = new LinkedBlockingQueue<>();
private final HashMap<Player, String> prefixes = new HashMap<>();
private final HashMap<Player, String> suffixes = new HashMap<>();
@ -25,7 +23,7 @@ public class BukkitPermissions implements Runnable
public final HashMap<Player, PermissionAttachment> attachments = new HashMap<>();
public void recalculateOnlinePlayers()
{
updateQueue.addAll(Arrays.asList(rscp.getServer().getOnlinePlayers()));
updateQueue.addAll(rscp.getServer().getOnlinePlayers());
rscp.scheduleAutoUpdate();
}
public void recalculatePlayer(Player player)
@ -36,33 +34,10 @@ public class BukkitPermissions implements Runnable
} catch(InterruptedException ex) {
}
}
public void start()
{
stop();
thread = new Thread(this);
thread.start();
}
public void stop()
{
if(thread != null)
{
if(thread.isAlive())
{
try
{
thread.interrupt();
thread.join();
} catch(InterruptedException ex) {
BukkitPluginMain.consoleLog.log(Level.SEVERE, "[rscp] Exception in BukkitPermissions: {0}", ex);
}
}
thread = null;
}
}
@Override
public void run()
{
Thread.currentThread().setName("rscp:PermissionManager");
Thread.currentThread().setName("rscp:" + this.getClass().getSimpleName());
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
try
{

3
src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java

@ -1,4 +1,5 @@
package ru.simsonic.rscPermissions;
import ru.simsonic.rscPermissions.Bukkit.BukkitMaintenance;
import ru.simsonic.rscPermissions.API.Settings;
import java.io.IOException;
import java.util.logging.Level;
@ -27,7 +28,7 @@ public final class BukkitPluginMain extends JavaPlugin
public final RegionListProviders regionListProvider = new RegionListProviders(this);
private final RegionUpdateObserver regionUpdateObserver = new RegionUpdateObserver(this);
public final CommandHelper commandHelper = new CommandHelper(this);
public final MaintenanceMode maintenance = new MaintenanceMode(this);
public final BukkitMaintenance maintenance = new BukkitMaintenance(this);
public ConnectionHelper connectionList;
private MetricsLite metrics;
@Override

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

@ -6,7 +6,7 @@ public abstract class AbstractRow
public int id = 0;
public static enum Table
{
entities, permissions, inheritance, ladders, unknown;
entities, permissions, inheritance, unknown;
}
public abstract Table getTable();
private static final Pattern patternUUID = Pattern.compile(

23
src/main/java/ru/simsonic/rscPermissions/DataTypes/CommandHelperAnswerException.java

@ -1,23 +0,0 @@
package ru.simsonic.rscPermissions.DataTypes;
import java.util.List;
public class CommandHelperAnswerException extends Exception
{
private final String[] message;
public CommandHelperAnswerException(String message)
{
this.message = new String[]{message};
}
public CommandHelperAnswerException(String[] messages)
{
this.message = messages;
}
public CommandHelperAnswerException(List<String> messages)
{
this.message = messages.toArray(new String[messages.size()]);
}
public String[] getMessageArray()
{
return message;
}
}

51
src/main/java/ru/simsonic/rscPermissions/Phrases.java

@ -0,0 +1,51 @@
package ru.simsonic.rscPermissions;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.logging.Level;
import org.bukkit.configuration.file.YamlConfiguration;
public enum Phrases
{
PLUGIN_ENABLED ("generic.enabled"),
PLUGIN_DISABLED ("generic.disabled"),
PLUGIN_METRICS ("generic.metrics"),
PLUGIN_RELOADED ("generic.reloaded"),
FETCHED ("generic.fetched");
private final String node;
private String phrase;
private Phrases(String node)
{
this.node = node;
}
@Override
public String toString()
{
return phrase;
}
public static void fill(BukkitPluginMain plugin, String langName)
{
final File langFile = new File(plugin.getDataFolder(), langName + ".yml");
final YamlConfiguration langConfig = YamlConfiguration.loadConfiguration(langFile);
for(Phrases value : Phrases.values())
value.phrase = langConfig.getString(value.node, value.node);
}
public static void extract(BukkitPluginMain plugin, String langName)
{
try
{
final File langFile = new File(plugin.getDataFolder(), langName + ".yml");
if(!langFile.isFile())
{
final YamlConfiguration langConfig = YamlConfiguration.loadConfiguration(langFile);
final InputStream langStream = BukkitPluginMain.class.getResourceAsStream("/languages/" + langName + ".yml");
YamlConfiguration langSource = YamlConfiguration.loadConfiguration(new InputStreamReader(langStream));
langConfig.setDefaults(langSource);
langConfig.save(langFile);
}
} catch(IOException ex) {
BukkitPluginMain.consoleLog.log(Level.WARNING, "Cannot extract language: {0}", langName);
}
}
}

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

@ -1,15 +1,14 @@
package ru.simsonic.rscPermissions;
import java.util.logging.Level;
import org.bukkit.entity.Player;
import ru.simsonic.rscUtilityLibrary.BukkitListeners.MovingPlayersCatcher;
import ru.simsonic.rscUtilityLibrary.RestartableThread;
public class RegionUpdateObserver implements Runnable
public class RegionUpdateObserver extends RestartableThread
{
private static final long granularityMin = 20;
private static final long granularityMax = 10000;
private final BukkitPluginMain rscp;
private final MovingPlayersCatcher movedPlayers = new MovingPlayersCatcher();
private Thread thread;
RegionUpdateObserver(BukkitPluginMain rscp)
{
this.rscp = rscp;
@ -18,35 +17,12 @@ public class RegionUpdateObserver implements Runnable
{
rscp.getServer().getPluginManager().registerEvents(movedPlayers, rscp);
}
public void start()
{
stop();
thread = new Thread(this);
thread.start();
}
public void stop()
{
if(thread != null)
{
if(thread.isAlive())
{
try
{
thread.interrupt();
thread.join();
} catch(InterruptedException ex) {
BukkitPluginMain.consoleLog.log(Level.SEVERE, "[rscp] Exception in RegionUpdateObserver: {0}", ex);
}
}
thread = null;
}
}
@Override
public void run()
{
try
{
Thread.currentThread().setName("rscp:RegionUpdateObserver");
Thread.currentThread().setName("rscp:" + this.getClass().getSimpleName());
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
long granularity = rscp.settings.getRegionFinderGranularity();
if(granularity < granularityMin)

14
src/main/resources/config.yml

@ -4,7 +4,7 @@ settings:
treat-asterisk-as-op: true
auto-reload-delay-sec: 900
use-metrics: true
language: en_US
language: english
maintenance-mode: ''
region-finder-thread-granularity-msec: 1000
integration:
@ -23,17 +23,5 @@ servers:
password: pass2
prefixes: rscp_
workmode: none
language:
maintenance:
unlocked: '{_YL}Server left the maintenance mode'
locked:
default:
mmon: '{_YL}Server is going into maintenance mode.{_NL}{_YL}All players without permissions will be kicked.'
kick: '{_YL}Server is in maintenance mode\nPlease try to connect later...'
motd: '{_DR}Server is under maintenance'
rollback:
motd: '{_DR}Rolling back griefing.'
worldedit:
motd: '{_DR}We are editing world with WE.'
internal:
version: 1

0
src/main/resources/languages/english.yml

0
src/main/resources/languages/russian.yml

8
src/main/resources/plugin.yml

@ -1,8 +1,8 @@
name: ${project.artifactId}
name: ${project.artifactId}
version: ${project.version}
main: ${project.groupId}.${project.artifactId}.BukkitPluginMain
author: SimSonic
website: ${project.url}
main: ${project.groupId}.${project.artifactId}.BukkitPluginMain
author: SimSonic
softdepend:
- Vault
- WorldEdit
@ -31,5 +31,5 @@ permissions:
description: Allows to reload configuration and database
default: op
rscp.maintenance.*:
description: Allows to connect when server in any maintenance mode
description: Allows to connect when server is in any maintenance mode
default: op

Loading…
Cancel
Save