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. 50
      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. 33
      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 UPDATER_URL = "http://simsonic.github.io/rscPermissions/latest.json";
public static final String CHAT_PREFIX = "{GOLD}[rscp] {_LS}"; 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 UPDATE_CMD = "/rscp update do";
public static final String PREFIX_PHOLDER = "%"; public static final String PREFIX_PHOLDER = "%";

50
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.Bukkit.WorldEditPermissions;
import ru.simsonic.rscPermissions.Engine.Phrases; import ru.simsonic.rscPermissions.Engine.Phrases;
public class BridgeForBukkitAPI public final class BridgeForBukkitAPI
{ {
private static BridgeForBukkitAPI instance; private static BridgeForBukkitAPI instance;
public static BridgeForBukkitAPI getInstance() public static BridgeForBukkitAPI getInstance()
@ -26,22 +26,26 @@ public class BridgeForBukkitAPI
private final VaultChat vaultChat; private final VaultChat vaultChat;
protected BridgeForBukkitAPI(BukkitPluginMain plugin) protected BridgeForBukkitAPI(BukkitPluginMain plugin)
{ {
BridgeForBukkitAPI.instance = BridgeForBukkitAPI.this; instance = BridgeForBukkitAPI.this;
this.rscp = plugin; this.rscp = plugin;
this.vaultPermission = new VaultPermission(this); this.vaultPermission = new VaultPermission(this);
this.vaultChat = new VaultChat(this, vaultPermission); this.vaultChat = new VaultChat(this, vaultPermission);
} }
public JavaPlugin getPlugin() public void onEnable()
{ {
return this.rscp; setupVault();
} rscp.getServer().getScheduler().runTask(rscp, new Runnable()
public Permission getPermission()
{ {
return this.vaultPermission; @Override
public void run()
{
setupWEPIF();
} }
public Chat getChat() });
}
public JavaPlugin getPlugin()
{ {
return this.vaultChat; return this.rscp;
} }
public String getName() public String getName()
{ {
@ -51,7 +55,15 @@ public class BridgeForBukkitAPI
{ {
return rscp.isEnabled(); 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 ConsoleCommandSender console = rscp.getServer().getConsoleSender();
final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("Vault"); final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("Vault");
@ -69,7 +81,7 @@ public class BridgeForBukkitAPI
} else } else
console.sendMessage(Phrases.INTEGRATION_V_N.toPlayer()); console.sendMessage(Phrases.INTEGRATION_V_N.toPlayer());
} }
protected void setupWEPIF() private void setupWEPIF()
{ {
final ConsoleCommandSender console = rscp.getServer().getConsoleSender(); final ConsoleCommandSender console = rscp.getServer().getConsoleSender();
final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("WorldEdit"); final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("WorldEdit");
@ -89,7 +101,8 @@ public class BridgeForBukkitAPI
{ {
if(rscp.permissionManager.isConsoleDebugging()) 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())); rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString()));
} }
} }
@ -97,17 +110,18 @@ public class BridgeForBukkitAPI
{ {
if(rscp.permissionManager.isConsoleDebugging()) if(rscp.permissionManager.isConsoleDebugging())
{ {
final StringBuilder sb = new StringBuilder(Settings.CHAT_PREFIX); final StringBuilder sb = new StringBuilder(Settings.DEBUG_PREFIX)
sb.append("[DEBUG] An API method was invoked from the path:").append(System.lineSeparator()); .append("An API method was invoked from the path:")
for(StackTraceElement ste : Thread.currentThread().getStackTrace()) .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()) if(!className.equals(BridgeForBukkitAPI.class.getName())
&& !className.equals(Thread.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(className.startsWith(BukkitPluginMain.class.getPackage().getName()) ? "{_LG}" : "{_LS}")
.append(ste.toString()) .append(element.toString())
.append(System.lineSeparator()); .append(System.lineSeparator());
} }
rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString())); 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.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import ru.simsonic.rscCommonsLibrary.RestartableThread; 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.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents; import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents;
import ru.simsonic.rscPermissions.Engine.Phrases; 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."); BukkitPluginMain.consoleLog.warning("[rscp] Cannot connect to database! Using local cache only.");
return; return;
} }
// Download rows from DB and put them into local cache
final DatabaseContents contents = remoteToLocal(); final DatabaseContents contents = remoteToLocal();
rscp.connection.disconnect(); rscp.connection.disconnect();
if(contents != null) if(contents != null)
@ -66,21 +65,20 @@ public class BukkitFetching extends RestartableThread
public void run() public void run()
{ {
for(CommandSender debugger : debuggers) for(CommandSender debugger : debuggers)
debugger.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX debugger.sendMessage(Phrases.DEBUG_FETCH_TIME.toPlayer()
+ "Database has been fetched in " + queryTime + " milliseconds.")); .replace("{:MS}", Long.toString(queryTime)));
} }
}); });
} else } else
BukkitPluginMain.consoleLog.warning("[rscp] Cannot load data from database."); BukkitPluginMain.consoleLog.warning("[rscp] Cannot load data from database.");
} }
public synchronized DatabaseContents remoteToLocal() private synchronized DatabaseContents remoteToLocal()
{ {
final DatabaseContents contents = rscp.connection.retrieveContents(); final DatabaseContents contents = rscp.connection.retrieveContents();
if(contents != null) if(contents != null)
{ {
rscp.localStorage.cleanup(); rscp.localStorage.cleanup();
rscp.localStorage.saveContents(contents); rscp.localStorage.saveContents(contents);
// contents.filterServerId(rscp.getServer().getServerId());
} }
return contents; return contents;
} }

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

@ -37,7 +37,7 @@ public class BukkitPermissionManager extends RestartableThread
{ {
resolutions.clear(); resolutions.clear();
updateQueue.addAll(Tools.getOnlinePlayers()); updateQueue.addAll(Tools.getOnlinePlayers());
rscp.scheduleAutoUpdate(); rscp.rescheduleAutoUpdate();
} }
public void recalculatePlayer(Player player) 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.GenericChatCodes;
import ru.simsonic.rscMinecraftLibrary.Bukkit.Tools; import ru.simsonic.rscMinecraftLibrary.Bukkit.Tools;
import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscPermissions.Bukkit.BukkitFetching;
import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Phrases; import ru.simsonic.rscPermissions.Engine.Phrases;
@ -18,19 +17,15 @@ public class BukkitCommands
private final BukkitPluginMain rscp; private final BukkitPluginMain rscp;
private final CommandEntity cmdEntity; private final CommandEntity cmdEntity;
private final CommandLock cmdLock; private final CommandLock cmdLock;
private final CommandFetch cmdFetch;
private final CommandDebug cmdDebug; private final CommandDebug cmdDebug;
private final CommandReload cmdReload; private final CommandReload cmdReload;
private final CommandUpdate cmdUpdate;
public BukkitCommands(final BukkitPluginMain plugin) public BukkitCommands(final BukkitPluginMain plugin)
{ {
this.rscp = plugin; this.rscp = plugin;
cmdEntity = new CommandEntity(rscp); cmdEntity = new CommandEntity(rscp);
cmdLock = new CommandLock (rscp); cmdLock = new CommandLock (rscp);
cmdFetch = new CommandFetch (rscp);
cmdDebug = new CommandDebug (rscp); cmdDebug = new CommandDebug (rscp);
cmdReload = new CommandReload(rscp); cmdReload = new CommandReload(rscp);
cmdUpdate = new CommandUpdate(rscp);
} }
@Deprecated @Deprecated
public Thread threadMigrateFromPExSQL(final CommandSender sender) public Thread threadMigrateFromPExSQL(final CommandSender sender)
@ -155,16 +150,16 @@ public class BukkitCommands
cmdLock.executeUnlock(sender); cmdLock.executeUnlock(sender);
return; return;
case "fetch": case "fetch":
cmdFetch.execute(sender); cmdReload.executeFetch(sender);
return;
case "debug":
cmdDebug.execute(sender, args);
return; return;
case "reload": case "reload":
cmdReload.execute(sender); cmdReload.executeReload(sender);
return; return;
case "update": case "update":
cmdUpdate.execute(sender, args); cmdReload.executeUpdate(sender, args);
return;
case "debug":
cmdDebug.execute(sender, args);
return; return;
case "examplerows": case "examplerows":
/* DEPRECATED: rscp 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; package ru.simsonic.rscPermissions.Bukkit.Commands;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException;
import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Phrases; import ru.simsonic.rscPermissions.Engine.Phrases;
@ -12,7 +13,15 @@ public class CommandReload
{ {
this.rscp = plugin; 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")) if(sender.hasPermission("rscp.admin.reload"))
{ {
@ -21,4 +30,16 @@ public class CommandReload
throw new CommandAnswerException(Phrases.PLUGIN_RELOADED.toString()); 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);
}
}
}
}

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

@ -92,15 +92,7 @@ public final class BukkitPluginMain extends JavaPlugin
getServer().getPluginManager().registerEvents(listener, this); getServer().getPluginManager().registerEvents(listener, this);
regionObserver.registerListeners(); regionObserver.registerListeners();
// Integrate Vault and WEPIF // Integrate Vault and WEPIF
rscpAPIs.setupVault(); rscpAPIs.onEnable();
getServer().getScheduler().runTask(this, new Runnable()
{
@Override
public void run()
{
rscpAPIs.setupWEPIF();
}
});
// WorldGuard, Residence and other possible region list providers // WorldGuard, Residence and other possible region list providers
regionProviders.integrate(); regionProviders.integrate();
// Start all needed parallel threads as daemons // Start all needed parallel threads as daemons
@ -108,12 +100,12 @@ public final class BukkitPluginMain extends JavaPlugin
regionObserver.startDeamon(); regionObserver.startDeamon();
// Connect to database and initiate data fetching // Connect to database and initiate data fetching
connection.initialize(settings.getConnectionParams()); connection.initialize(settings.getConnectionParams());
if(settings.getAutoReloadDelayTicks() > 0) fetchNowAndReschedule();
fetching.startDeamon(); // Check for update and notify admins
// Done
for(Player online : Tools.getOnlinePlayers()) for(Player online : Tools.getOnlinePlayers())
if(online.hasPermission("rscm.admin")) if(online.hasPermission("rscm.admin"))
updating.onAdminJoin(online, false); updating.onAdminJoin(online, false);
// Done
consoleLog.info(Phrases.PLUGIN_ENABLED.toString()); consoleLog.info(Phrases.PLUGIN_ENABLED.toString());
} }
@Override @Override
@ -135,22 +127,29 @@ public final class BukkitPluginMain extends JavaPlugin
consoleLog.info(Phrases.PLUGIN_DISABLED.toString()); consoleLog.info(Phrases.PLUGIN_DISABLED.toString());
} }
private int nAutoUpdaterTaskId = -1; private int nAutoUpdaterTaskId = -1;
public void scheduleAutoUpdate() public void rescheduleAutoUpdate()
{ {
final BukkitScheduler scheduler = getServer().getScheduler(); final BukkitScheduler scheduler = getServer().getScheduler();
if(nAutoUpdaterTaskId != -1) if(nAutoUpdaterTaskId != -1)
scheduler.cancelTask(nAutoUpdaterTaskId); scheduler.cancelTask(nAutoUpdaterTaskId);
final int delay = settings.getAutoReloadDelayTicks(); final int delay = settings.getAutoReloadDelayTicks();
nAutoUpdaterTaskId = delay > 0 if(delay > 0)
? scheduler.scheduleSyncDelayedTask(this, new Runnable() {
nAutoUpdaterTaskId = scheduler.scheduleSyncDelayedTask(this, new Runnable()
{ {
@Override @Override
public void run() public void run()
{ {
fetching.startDeamon(); fetching.startDeamon();
} }
}, delay) }, delay);
: -1; } else
nAutoUpdaterTaskId = -1;
}
public void fetchNowAndReschedule()
{
fetching.startDeamon();
rescheduleAutoUpdate();
} }
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) 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.LinkedList;
import java.util.Map; import java.util.Map;
import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes;
import ru.simsonic.rscPermissions.API.EntityType;
import ru.simsonic.rscPermissions.API.RowEntity; import ru.simsonic.rscPermissions.API.RowEntity;
import ru.simsonic.rscPermissions.API.RowInheritance; import ru.simsonic.rscPermissions.API.RowInheritance;
import ru.simsonic.rscPermissions.API.RowPermission; import ru.simsonic.rscPermissions.API.RowPermission;
@ -81,6 +80,7 @@ public class DatabaseEditor extends BackendDatabase
row.expirience != 0 ? row.expirience : null, row.expirience != 0 ? row.expirience : null,
/* FIX LIFETIME */ null); /* FIX LIFETIME */ null);
} }
/*
private DatabaseContents prepareChanges() private DatabaseContents prepareChanges()
{ {
// START TRANSACTION AND LOCK TABLE // START TRANSACTION AND LOCK TABLE
@ -101,6 +101,7 @@ public class DatabaseEditor extends BackendDatabase
// CALL PLUGIN TO APPLY ALL THIS CHANGES // CALL PLUGIN TO APPLY ALL THIS CHANGES
plugin.fetching.run(); plugin.fetching.run();
} }
*/
private RowPermission restorePermissionsAfterDelete(DatabaseContents contents, RowPermission remove) private RowPermission restorePermissionsAfterDelete(DatabaseContents contents, RowPermission remove)
{ {
final LinkedList<RowPermission> sameIDs = new LinkedList<>(); 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"), INTEGRATION_R_N ("integration.residence-no"),
DEBUG_ON ("debug.enable"), DEBUG_ON ("debug.enable"),
DEBUG_OFF ("debug.disable"), DEBUG_OFF ("debug.disable"),
DEBUG_FETCH_TIME ("debug.fetch-time"),
DEBUG_INGAME_1 ("debug.ingame-1"), DEBUG_INGAME_1 ("debug.ingame-1"),
DEBUG_INGAME_2 ("debug.ingame-2"), DEBUG_INGAME_2 ("debug.ingame-2"),
FETCHED_ANSWER ("database.command-answer"), FETCHED_ANSWER ("database.command-answer"),

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

@ -21,6 +21,7 @@ integration:
debug: debug:
enable: "You will see a lot of debugging information now." enable: "You will see a lot of debugging information now."
disable: "Debugging information is now hidden for you." 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-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." ingame-2: "{_WH}[DEBUG]{_R}{_LS} Now you have total {_LG}{:PERMISSIONS}{_LS} permissions."
database: database:

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

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

Loading…
Cancel
Save