Browse Source

Work continuation.

master
Stanislav Usenkov 9 years ago
parent
commit
145d7e7719
  1. 1
      src/main/java/ru/simsonic/rscPermissions/API/Settings.java
  2. 54
      src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
  3. 10
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitFetching.java
  4. 2
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java
  5. 17
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java
  6. 23
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandFetch.java
  7. 23
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandReload.java
  8. 27
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUpdate.java
  9. 43
      src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
  10. 3
      src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseEditor.java
  11. 1
      src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java
  12. 1
      src/main/resources/languages/english.yml
  13. 1
      src/main/resources/languages/russian.yml

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

@ -8,6 +8,7 @@ public interface Settings
{
public static final String UPDATER_URL = "http://simsonic.github.io/rscPermissions/latest.json";
public static final String CHAT_PREFIX = "{GOLD}[rscp] {_LS}";
public static final String DEBUG_PREFIX = CHAT_PREFIX + "{_WH}[DEBUG]{_LS} ";
public static final String UPDATE_CMD = "/rscp update do";
public static final String PREFIX_PHOLDER = "%";

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

@ -14,7 +14,7 @@ import ru.simsonic.rscPermissions.Bukkit.VaultPermission;
import ru.simsonic.rscPermissions.Bukkit.WorldEditPermissions;
import ru.simsonic.rscPermissions.Engine.Phrases;
public class BridgeForBukkitAPI
public final class BridgeForBukkitAPI
{
private static BridgeForBukkitAPI instance;
public static BridgeForBukkitAPI getInstance()
@ -26,22 +26,26 @@ public class BridgeForBukkitAPI
private final VaultChat vaultChat;
protected BridgeForBukkitAPI(BukkitPluginMain plugin)
{
BridgeForBukkitAPI.instance = BridgeForBukkitAPI.this;
this.rscp = plugin;
instance = BridgeForBukkitAPI.this;
this.rscp = plugin;
this.vaultPermission = new VaultPermission(this);
this.vaultChat = new VaultChat(this, vaultPermission);
}
public JavaPlugin getPlugin()
{
return this.rscp;
}
public Permission getPermission()
public void onEnable()
{
return this.vaultPermission;
setupVault();
rscp.getServer().getScheduler().runTask(rscp, new Runnable()
{
@Override
public void run()
{
setupWEPIF();
}
});
}
public Chat getChat()
public JavaPlugin getPlugin()
{
return this.vaultChat;
return this.rscp;
}
public String getName()
{
@ -51,7 +55,15 @@ public class BridgeForBukkitAPI
{
return rscp.isEnabled();
}
protected void setupVault()
public Permission getPermission()
{
return this.vaultPermission;
}
public Chat getChat()
{
return this.vaultChat;
}
private void setupVault()
{
final ConsoleCommandSender console = rscp.getServer().getConsoleSender();
final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("Vault");
@ -69,7 +81,7 @@ public class BridgeForBukkitAPI
} else
console.sendMessage(Phrases.INTEGRATION_V_N.toPlayer());
}
protected void setupWEPIF()
private void setupWEPIF()
{
final ConsoleCommandSender console = rscp.getServer().getConsoleSender();
final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("WorldEdit");
@ -89,7 +101,8 @@ public class BridgeForBukkitAPI
{
if(rscp.permissionManager.isConsoleDebugging())
{
final StringBuilder sb = new StringBuilder(Settings.CHAT_PREFIX).append("[DEBUG] {_LS}").append(info);
final StringBuilder sb = new StringBuilder(Settings.DEBUG_PREFIX)
.append(info);
rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString()));
}
}
@ -97,17 +110,18 @@ public class BridgeForBukkitAPI
{
if(rscp.permissionManager.isConsoleDebugging())
{
final StringBuilder sb = new StringBuilder(Settings.CHAT_PREFIX);
sb.append("[DEBUG] An API method was invoked from the path:").append(System.lineSeparator());
for(StackTraceElement ste : Thread.currentThread().getStackTrace())
final StringBuilder sb = new StringBuilder(Settings.DEBUG_PREFIX)
.append("An API method was invoked from the path:")
.append(System.lineSeparator());
for(StackTraceElement element : Thread.currentThread().getStackTrace())
{
final String className = ste.getClassName();
final String className = element.getClassName();
if(!className.equals(BridgeForBukkitAPI.class.getName())
&& !className.equals(Thread.class.getName())
)
sb.append(Settings.CHAT_PREFIX).append("[DEBUG] ")
sb.append(Settings.DEBUG_PREFIX)
.append(className.startsWith(BukkitPluginMain.class.getPackage().getName()) ? "{_LG}" : "{_LS}")
.append(ste.toString())
.append(element.toString())
.append(System.lineSeparator());
}
rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString()));

10
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitFetching.java

@ -4,8 +4,6 @@ import java.util.Set;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import ru.simsonic.rscCommonsLibrary.RestartableThread;
import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes;
import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents;
import ru.simsonic.rscPermissions.Engine.Phrases;
@ -29,6 +27,7 @@ public class BukkitFetching extends RestartableThread
BukkitPluginMain.consoleLog.warning("[rscp] Cannot connect to database! Using local cache only.");
return;
}
// Download rows from DB and put them into local cache
final DatabaseContents contents = remoteToLocal();
rscp.connection.disconnect();
if(contents != null)
@ -66,21 +65,20 @@ public class BukkitFetching extends RestartableThread
public void run()
{
for(CommandSender debugger : debuggers)
debugger.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX
+ "Database has been fetched in " + queryTime + " milliseconds."));
debugger.sendMessage(Phrases.DEBUG_FETCH_TIME.toPlayer()
.replace("{:MS}", Long.toString(queryTime)));
}
});
} else
BukkitPluginMain.consoleLog.warning("[rscp] Cannot load data from database.");
}
public synchronized DatabaseContents remoteToLocal()
private synchronized DatabaseContents remoteToLocal()
{
final DatabaseContents contents = rscp.connection.retrieveContents();
if(contents != null)
{
rscp.localStorage.cleanup();
rscp.localStorage.saveContents(contents);
// contents.filterServerId(rscp.getServer().getServerId());
}
return contents;
}

2
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java

@ -37,7 +37,7 @@ public class BukkitPermissionManager extends RestartableThread
{
resolutions.clear();
updateQueue.addAll(Tools.getOnlinePlayers());
rscp.scheduleAutoUpdate();
rscp.rescheduleAutoUpdate();
}
public void recalculatePlayer(Player player)
{

17
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java

@ -9,7 +9,6 @@ import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException;
import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes;
import ru.simsonic.rscMinecraftLibrary.Bukkit.Tools;
import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscPermissions.Bukkit.BukkitFetching;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Phrases;
@ -18,19 +17,15 @@ public class BukkitCommands
private final BukkitPluginMain rscp;
private final CommandEntity cmdEntity;
private final CommandLock cmdLock;
private final CommandFetch cmdFetch;
private final CommandDebug cmdDebug;
private final CommandReload cmdReload;
private final CommandUpdate cmdUpdate;
public BukkitCommands(final BukkitPluginMain plugin)
{
this.rscp = plugin;
cmdEntity = new CommandEntity(rscp);
cmdLock = new CommandLock (rscp);
cmdFetch = new CommandFetch (rscp);
cmdDebug = new CommandDebug (rscp);
cmdReload = new CommandReload(rscp);
cmdUpdate = new CommandUpdate(rscp);
}
@Deprecated
public Thread threadMigrateFromPExSQL(final CommandSender sender)
@ -155,16 +150,16 @@ public class BukkitCommands
cmdLock.executeUnlock(sender);
return;
case "fetch":
cmdFetch.execute(sender);
return;
case "debug":
cmdDebug.execute(sender, args);
cmdReload.executeFetch(sender);
return;
case "reload":
cmdReload.execute(sender);
cmdReload.executeReload(sender);
return;
case "update":
cmdUpdate.execute(sender, args);
cmdReload.executeUpdate(sender, args);
return;
case "debug":
cmdDebug.execute(sender, args);
return;
case "examplerows":
/* DEPRECATED: rscp examplerows */

23
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandFetch.java

@ -1,23 +0,0 @@
package ru.simsonic.rscPermissions.Bukkit.Commands;
import org.bukkit.command.CommandSender;
import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Phrases;
public class CommandFetch
{
private final BukkitPluginMain rscp;
CommandFetch(BukkitPluginMain plugin)
{
this.rscp = plugin;
}
public void execute(CommandSender sender) throws CommandAnswerException
{
if(sender.hasPermission("rscp.admin.reload"))
{
rscp.fetching.startDeamon();
throw new CommandAnswerException(Phrases.FETCHED_ANSWER.toString());
}
}
}

23
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandReload.java

@ -1,6 +1,7 @@
package ru.simsonic.rscPermissions.Bukkit.Commands;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Phrases;
@ -12,7 +13,15 @@ public class CommandReload
{
this.rscp = plugin;
}
public void execute(CommandSender sender) throws CommandAnswerException
public void executeFetch(CommandSender sender) throws CommandAnswerException
{
if(sender.hasPermission("rscp.admin.reload"))
{
rscp.fetchNowAndReschedule();
throw new CommandAnswerException(Phrases.FETCHED_ANSWER.toString());
}
}
public void executeReload(CommandSender sender) throws CommandAnswerException
{
if(sender.hasPermission("rscp.admin.reload"))
{
@ -21,4 +30,16 @@ public class CommandReload
throw new CommandAnswerException(Phrases.PLUGIN_RELOADED.toString());
}
}
public void executeUpdate(CommandSender sender, String args[]) throws CommandAnswerException
{
if(sender.hasPermission("rscp.admin"))
{
if(args.length > 1 && "do".equals(args[1]))
{
rscp.updating.doUpdate(sender instanceof Player ? (Player)sender : null);
} else {
rscp.updating.checkUpdate(sender instanceof Player ? (Player)sender : null);
}
}
}
}

27
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUpdate.java

@ -1,27 +0,0 @@
package ru.simsonic.rscPermissions.Bukkit.Commands;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException;
import ru.simsonic.rscPermissions.BukkitPluginMain;
public class CommandUpdate
{
private final BukkitPluginMain rscp;
CommandUpdate(BukkitPluginMain plugin)
{
this.rscp = plugin;
}
public void execute(CommandSender sender, String args[]) throws CommandAnswerException
{
if(sender.hasPermission("rscp.admin"))
{
if(args.length > 1 && "do".equals(args[1]))
{
rscp.updating.doUpdate(sender instanceof Player ? (Player)sender : null);
} else {
rscp.updating.checkUpdate(sender instanceof Player ? (Player)sender : null);
}
}
}
}

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

@ -92,15 +92,7 @@ public final class BukkitPluginMain extends JavaPlugin
getServer().getPluginManager().registerEvents(listener, this);
regionObserver.registerListeners();
// Integrate Vault and WEPIF
rscpAPIs.setupVault();
getServer().getScheduler().runTask(this, new Runnable()
{
@Override
public void run()
{
rscpAPIs.setupWEPIF();
}
});
rscpAPIs.onEnable();
// WorldGuard, Residence and other possible region list providers
regionProviders.integrate();
// Start all needed parallel threads as daemons
@ -108,12 +100,12 @@ public final class BukkitPluginMain extends JavaPlugin
regionObserver.startDeamon();
// Connect to database and initiate data fetching
connection.initialize(settings.getConnectionParams());
if(settings.getAutoReloadDelayTicks() > 0)
fetching.startDeamon();
// Done
fetchNowAndReschedule();
// Check for update and notify admins
for(Player online : Tools.getOnlinePlayers())
if(online.hasPermission("rscm.admin"))
updating.onAdminJoin(online, false);
// Done
consoleLog.info(Phrases.PLUGIN_ENABLED.toString());
}
@Override
@ -135,22 +127,29 @@ public final class BukkitPluginMain extends JavaPlugin
consoleLog.info(Phrases.PLUGIN_DISABLED.toString());
}
private int nAutoUpdaterTaskId = -1;
public void scheduleAutoUpdate()
public void rescheduleAutoUpdate()
{
final BukkitScheduler scheduler = getServer().getScheduler();
if(nAutoUpdaterTaskId != -1)
scheduler.cancelTask(nAutoUpdaterTaskId);
final int delay = settings.getAutoReloadDelayTicks();
nAutoUpdaterTaskId = delay > 0
? scheduler.scheduleSyncDelayedTask(this, new Runnable()
if(delay > 0)
{
nAutoUpdaterTaskId = scheduler.scheduleSyncDelayedTask(this, new Runnable()
{
@Override
public void run()
{
@Override
public void run()
{
fetching.startDeamon();
}
}, delay)
: -1;
fetching.startDeamon();
}
}, delay);
} else
nAutoUpdaterTaskId = -1;
}
public void fetchNowAndReschedule()
{
fetching.startDeamon();
rescheduleAutoUpdate();
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)

3
src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseEditor.java

@ -5,7 +5,6 @@ import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;
import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes;
import ru.simsonic.rscPermissions.API.EntityType;
import ru.simsonic.rscPermissions.API.RowEntity;
import ru.simsonic.rscPermissions.API.RowInheritance;
import ru.simsonic.rscPermissions.API.RowPermission;
@ -81,6 +80,7 @@ public class DatabaseEditor extends BackendDatabase
row.expirience != 0 ? row.expirience : null,
/* FIX LIFETIME */ null);
}
/*
private DatabaseContents prepareChanges()
{
// START TRANSACTION AND LOCK TABLE
@ -101,6 +101,7 @@ public class DatabaseEditor extends BackendDatabase
// CALL PLUGIN TO APPLY ALL THIS CHANGES
plugin.fetching.run();
}
*/
private RowPermission restorePermissionsAfterDelete(DatabaseContents contents, RowPermission remove)
{
final LinkedList<RowPermission> sameIDs = new LinkedList<>();

1
src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java

@ -33,6 +33,7 @@ public enum Phrases
INTEGRATION_R_N ("integration.residence-no"),
DEBUG_ON ("debug.enable"),
DEBUG_OFF ("debug.disable"),
DEBUG_FETCH_TIME ("debug.fetch-time"),
DEBUG_INGAME_1 ("debug.ingame-1"),
DEBUG_INGAME_2 ("debug.ingame-2"),
FETCHED_ANSWER ("database.command-answer"),

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

@ -21,6 +21,7 @@ integration:
debug:
enable: "You will see a lot of debugging information now."
disable: "Debugging information is now hidden for you."
fetch-time: "Database has been fetched in {:MS} milliseconds."
ingame-1: "{_WH}[DEBUG]{_R}{_LS} Your parent groups: {_LG}{:PARENTS}{_LS}."
ingame-2: "{_WH}[DEBUG]{_R}{_LS} Now you have total {_LG}{:PERMISSIONS}{_LS} permissions."
database:

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

@ -21,6 +21,7 @@ integration:
debug:
enable: "Теперь Вы будете видеть отладочную информацию."
disable: "Отладочная информация теперь скрыта от Вас."
fetch-time: "База данных была перечитана за {:MS} миллисекунд."
ingame-1: "{_WH}[DEBUG]{_R}{_LS} Группы, в которые Вы входите: {_LG}{:PARENTS}{_LS}."
ingame-2: "{_WH}[DEBUG]{_R}{_LS} Всего у Вас {_LG}{:PERMISSIONS}{_LS} прав."
database:

Loading…
Cancel
Save