8 changed files with 539 additions and 532 deletions
@ -1,119 +1,122 @@ |
|||||||
package ru.simsonic.rscPermissions; |
package ru.simsonic.rscPermissions; |
||||||
|
|
||||||
import com.sk89q.wepif.PermissionsResolverManager; |
import com.sk89q.wepif.PermissionsResolverManager; |
||||||
import org.bukkit.entity.Player; |
import org.bukkit.command.ConsoleCommandSender; |
||||||
import org.bukkit.plugin.Plugin; |
import org.bukkit.entity.Player; |
||||||
import org.bukkit.plugin.ServicePriority; |
import org.bukkit.plugin.Plugin; |
||||||
import ru.simsonic.rscPermissions.API.Settings; |
import org.bukkit.plugin.ServicePriority; |
||||||
import ru.simsonic.rscPermissions.Bukkit.VaultChat; |
import ru.simsonic.rscPermissions.API.Settings; |
||||||
import ru.simsonic.rscPermissions.Bukkit.VaultPermission; |
import ru.simsonic.rscPermissions.Bukkit.VaultChat; |
||||||
import ru.simsonic.rscPermissions.Bukkit.WorldEditPermissions; |
import ru.simsonic.rscPermissions.Bukkit.VaultPermission; |
||||||
import ru.simsonic.rscPermissions.Engine.Phrases; |
import ru.simsonic.rscPermissions.Bukkit.WorldEditPermissions; |
||||||
import ru.simsonic.rscUtilityLibrary.Bukkit.Tools; |
import ru.simsonic.rscPermissions.Engine.Phrases; |
||||||
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; |
import ru.simsonic.rscUtilityLibrary.Bukkit.Tools; |
||||||
|
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; |
||||||
public class BridgeForBukkitAPI |
|
||||||
{ |
public class BridgeForBukkitAPI |
||||||
private static BridgeForBukkitAPI instance; |
{ |
||||||
public static BridgeForBukkitAPI getInstance() |
private static BridgeForBukkitAPI instance; |
||||||
{ |
public static BridgeForBukkitAPI getInstance() |
||||||
return instance; |
{ |
||||||
} |
return instance; |
||||||
private final BukkitPluginMain rscp; |
} |
||||||
private final VaultPermission vaultPermission; |
private final BukkitPluginMain rscp; |
||||||
private final VaultChat vaultChat; |
private final VaultPermission vaultPermission; |
||||||
protected BridgeForBukkitAPI(BukkitPluginMain plugin) |
private final VaultChat vaultChat; |
||||||
{ |
protected BridgeForBukkitAPI(BukkitPluginMain plugin) |
||||||
BridgeForBukkitAPI.instance = BridgeForBukkitAPI.this; |
{ |
||||||
this.rscp = plugin; |
BridgeForBukkitAPI.instance = BridgeForBukkitAPI.this; |
||||||
this.vaultPermission = new VaultPermission(this); |
this.rscp = plugin; |
||||||
this.vaultChat = new VaultChat(this, vaultPermission); |
this.vaultPermission = new VaultPermission(this); |
||||||
} |
this.vaultChat = new VaultChat(this, vaultPermission); |
||||||
public org.bukkit.plugin.java.JavaPlugin getPlugin() |
} |
||||||
{ |
public org.bukkit.plugin.java.JavaPlugin getPlugin() |
||||||
return this.rscp; |
{ |
||||||
} |
return this.rscp; |
||||||
public net.milkbowl.vault.permission.Permission getPermission() |
} |
||||||
{ |
public net.milkbowl.vault.permission.Permission getPermission() |
||||||
return this.vaultPermission; |
{ |
||||||
} |
return this.vaultPermission; |
||||||
public net.milkbowl.vault.chat.Chat getChat() |
} |
||||||
{ |
public net.milkbowl.vault.chat.Chat getChat() |
||||||
return this.vaultChat; |
{ |
||||||
} |
return this.vaultChat; |
||||||
public String getName() |
} |
||||||
{ |
public String getName() |
||||||
return rscp.getDescription().getName(); |
{ |
||||||
} |
return rscp.getDescription().getName(); |
||||||
public boolean isEnabled() |
} |
||||||
{ |
public boolean isEnabled() |
||||||
return rscp.isEnabled(); |
{ |
||||||
} |
return rscp.isEnabled(); |
||||||
public Player findPlayer(String player) |
} |
||||||
{ |
public Player findPlayer(String player) |
||||||
for(Player online : Tools.getOnlinePlayers()) |
{ |
||||||
if(online.getName().equals(player)) |
for(Player online : Tools.getOnlinePlayers()) |
||||||
return online; |
if(online.getName().equals(player)) |
||||||
return null; |
return online; |
||||||
} |
return null; |
||||||
protected void setupVault() |
} |
||||||
{ |
protected void setupVault() |
||||||
final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("Vault"); |
{ |
||||||
if(plugin != null) |
final ConsoleCommandSender console = rscp.getServer().getConsoleSender(); |
||||||
{ |
final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("Vault"); |
||||||
// Register Chat
|
if(plugin != null) |
||||||
rscp.getServer().getServicesManager().register( |
{ |
||||||
net.milkbowl.vault.chat.Chat.class, vaultChat, |
// Register Chat
|
||||||
rscp, ServicePriority.Highest); |
rscp.getServer().getServicesManager().register( |
||||||
// Register Permission
|
net.milkbowl.vault.chat.Chat.class, vaultChat, |
||||||
rscp.getServer().getServicesManager().register( |
rscp, ServicePriority.Highest); |
||||||
net.milkbowl.vault.permission.Permission.class, vaultPermission, |
// Register Permission
|
||||||
rscp, ServicePriority.Highest); |
rscp.getServer().getServicesManager().register( |
||||||
BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_V_Y.toString())); |
net.milkbowl.vault.permission.Permission.class, vaultPermission, |
||||||
} else |
rscp, ServicePriority.Highest); |
||||||
BukkitPluginMain.consoleLog.warning(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_V_N.toString())); |
console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_V_Y.toString())); |
||||||
} |
} else |
||||||
protected void setupWEPIF() |
console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_V_N.toString())); |
||||||
{ |
} |
||||||
final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("WorldEdit"); |
protected void setupWEPIF() |
||||||
if(plugin != null) |
{ |
||||||
{ |
final ConsoleCommandSender console = rscp.getServer().getConsoleSender(); |
||||||
final WorldEditPermissions wepif = new WorldEditPermissions(this); |
final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("WorldEdit"); |
||||||
final PermissionsResolverManager prm = PermissionsResolverManager.getInstance(); |
if(plugin != null) |
||||||
if(prm != null) |
{ |
||||||
prm.setPluginPermissionsResolver(wepif); |
final WorldEditPermissions wepif = new WorldEditPermissions(this); |
||||||
else |
final PermissionsResolverManager prm = PermissionsResolverManager.getInstance(); |
||||||
PermissionsResolverManager.initialize(wepif); |
if(prm != null) |
||||||
BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WE_Y.toString())); |
prm.setPluginPermissionsResolver(wepif); |
||||||
} else |
else |
||||||
BukkitPluginMain.consoleLog.warning(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WE_N.toString())); |
PermissionsResolverManager.initialize(wepif); |
||||||
} |
console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WE_Y.toString())); |
||||||
public void printDebugString(String info) |
} else |
||||||
{ |
console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WE_N.toString())); |
||||||
if(rscp.permissionManager.isConsoleDebugging()) |
} |
||||||
{ |
public void printDebugString(String info) |
||||||
final StringBuilder sb = new StringBuilder(Settings.chatPrefix).append("[DEBUG] {_LS}").append(info); |
{ |
||||||
rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString())); |
if(rscp.permissionManager.isConsoleDebugging()) |
||||||
} |
{ |
||||||
} |
final StringBuilder sb = new StringBuilder(Settings.chatPrefix).append("[DEBUG] {_LS}").append(info); |
||||||
public void printDebugStackTrace() |
rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString())); |
||||||
{ |
} |
||||||
if(rscp.permissionManager.isConsoleDebugging()) |
} |
||||||
{ |
public void printDebugStackTrace() |
||||||
final StringBuilder sb = new StringBuilder(Settings.chatPrefix); |
{ |
||||||
sb.append("[DEBUG] An API method was invoked from the path:").append(System.lineSeparator()); |
if(rscp.permissionManager.isConsoleDebugging()) |
||||||
for(StackTraceElement ste : Thread.currentThread().getStackTrace()) |
{ |
||||||
{ |
final StringBuilder sb = new StringBuilder(Settings.chatPrefix); |
||||||
final String className = ste.getClassName(); |
sb.append("[DEBUG] An API method was invoked from the path:").append(System.lineSeparator()); |
||||||
if(!className.equals(BridgeForBukkitAPI.class.getName()) |
for(StackTraceElement ste : Thread.currentThread().getStackTrace()) |
||||||
&& !className.equals(Thread.class.getName()) |
{ |
||||||
) |
final String className = ste.getClassName(); |
||||||
sb.append(Settings.chatPrefix).append("[DEBUG] ") |
if(!className.equals(BridgeForBukkitAPI.class.getName()) |
||||||
.append(className.startsWith(BukkitPluginMain.class.getPackage().getName()) ? "{_LG}" : "{_LS}") |
&& !className.equals(Thread.class.getName()) |
||||||
.append(ste.toString()) |
) |
||||||
.append(System.lineSeparator()); |
sb.append(Settings.chatPrefix).append("[DEBUG] ") |
||||||
} |
.append(className.startsWith(BukkitPluginMain.class.getPackage().getName()) ? "{_LG}" : "{_LS}") |
||||||
rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString())); |
.append(ste.toString()) |
||||||
} |
.append(System.lineSeparator()); |
||||||
} |
} |
||||||
} |
rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString())); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
@ -1,133 +1,135 @@ |
|||||||
package ru.simsonic.rscPermissions.Bukkit; |
package ru.simsonic.rscPermissions.Bukkit; |
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; |
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; |
||||||
import com.sk89q.worldguard.protection.ApplicableRegionSet; |
import com.sk89q.worldguard.protection.ApplicableRegionSet; |
||||||
import com.sk89q.worldguard.protection.managers.RegionManager; |
import com.sk89q.worldguard.protection.managers.RegionManager; |
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion; |
import com.sk89q.worldguard.protection.regions.ProtectedRegion; |
||||||
import java.util.Collections; |
import java.util.Collections; |
||||||
import java.util.HashMap; |
import java.util.HashMap; |
||||||
import java.util.HashSet; |
import java.util.HashSet; |
||||||
import java.util.Map; |
import java.util.Map; |
||||||
import java.util.Set; |
import java.util.Set; |
||||||
import net.t00thpick1.residence.Residence; |
import net.t00thpick1.residence.Residence; |
||||||
import net.t00thpick1.residence.api.ResidenceAPI; |
import net.t00thpick1.residence.api.ResidenceAPI; |
||||||
import net.t00thpick1.residence.api.ResidenceManager; |
import net.t00thpick1.residence.api.ResidenceManager; |
||||||
import net.t00thpick1.residence.api.areas.ResidenceArea; |
import net.t00thpick1.residence.api.areas.ResidenceArea; |
||||||
import org.bukkit.Location; |
import org.bukkit.Location; |
||||||
import org.bukkit.World; |
import org.bukkit.World; |
||||||
import org.bukkit.entity.Player; |
import org.bukkit.command.ConsoleCommandSender; |
||||||
import org.bukkit.plugin.Plugin; |
import org.bukkit.entity.Player; |
||||||
import ru.simsonic.rscPermissions.BukkitPluginMain; |
import org.bukkit.plugin.Plugin; |
||||||
import ru.simsonic.rscPermissions.Engine.Phrases; |
import ru.simsonic.rscPermissions.BukkitPluginMain; |
||||||
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; |
import ru.simsonic.rscPermissions.Engine.Phrases; |
||||||
|
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; |
||||||
public final class BukkitRegionProviders |
|
||||||
{ |
public final class BukkitRegionProviders |
||||||
private final BukkitPluginMain plugin; |
{ |
||||||
private Plugin worldguard; |
private final BukkitPluginMain rscp; |
||||||
private Plugin residence; |
private Plugin worldguard; |
||||||
private final Map<Player, Set<String>> regionsByPlayer = new HashMap<>(); |
private Plugin residence; |
||||||
private final Map<Player, Integer> playerRegionHashes = new HashMap<>(); |
private final Map<Player, Set<String>> regionsByPlayer = new HashMap<>(); |
||||||
private final Map<Player, World> playerLastWorld = new HashMap<>(); |
private final Map<Player, Integer> playerRegionHashes = new HashMap<>(); |
||||||
public BukkitRegionProviders(BukkitPluginMain rscp) |
private final Map<Player, World> playerLastWorld = new HashMap<>(); |
||||||
{ |
public BukkitRegionProviders(BukkitPluginMain rscp) |
||||||
this.plugin = rscp; |
{ |
||||||
} |
this.rscp = rscp; |
||||||
public synchronized void integrate() |
} |
||||||
{ |
public synchronized void integrate() |
||||||
// WorldGuard
|
{ |
||||||
if(plugin.settings.isUseWorldGuard()) |
final ConsoleCommandSender console = rscp.getServer().getConsoleSender(); |
||||||
{ |
// WorldGuard
|
||||||
final Plugin pluginWG = plugin.getServer().getPluginManager().getPlugin("WorldGuard"); |
if(rscp.settings.isUseWorldGuard()) |
||||||
if(pluginWG != null && pluginWG instanceof WorldGuardPlugin) |
{ |
||||||
{ |
final Plugin pluginWG = rscp.getServer().getPluginManager().getPlugin("WorldGuard"); |
||||||
this.worldguard = pluginWG; |
if(pluginWG != null && pluginWG instanceof WorldGuardPlugin) |
||||||
BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_Y.toString())); |
{ |
||||||
} else { |
this.worldguard = pluginWG; |
||||||
this.worldguard = null; |
console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_Y.toString())); |
||||||
BukkitPluginMain.consoleLog.warning(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_N.toString())); |
} else { |
||||||
} |
this.worldguard = null; |
||||||
} else |
console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_N.toString())); |
||||||
this.worldguard = null; |
} |
||||||
// Residence
|
} else |
||||||
if(plugin.settings.isUseResidence()) |
this.worldguard = null; |
||||||
{ |
// Residence
|
||||||
final Plugin pluginR = plugin.getServer().getPluginManager().getPlugin("Residence"); |
if(rscp.settings.isUseResidence()) |
||||||
if(pluginR != null && pluginR instanceof Residence) |
{ |
||||||
{ |
final Plugin pluginR = rscp.getServer().getPluginManager().getPlugin("Residence"); |
||||||
this.residence = pluginR; |
if(pluginR != null && pluginR instanceof Residence) |
||||||
BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_R_Y.toString())); |
{ |
||||||
} else { |
this.residence = pluginR; |
||||||
this.residence = null; |
console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_R_Y.toString())); |
||||||
BukkitPluginMain.consoleLog.warning(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_R_N.toString())); |
} else { |
||||||
} |
this.residence = null; |
||||||
} else |
console.sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_R_N.toString())); |
||||||
this.residence = null; |
} |
||||||
} |
} else |
||||||
public synchronized void deintegrate() |
this.residence = null; |
||||||
{ |
} |
||||||
this.worldguard = null; |
public synchronized void deintegrate() |
||||||
this.residence = null; |
{ |
||||||
regionsByPlayer.clear(); |
this.worldguard = null; |
||||||
playerRegionHashes.clear(); |
this.residence = null; |
||||||
playerLastWorld.clear(); |
regionsByPlayer.clear(); |
||||||
} |
playerRegionHashes.clear(); |
||||||
public synchronized boolean isRegionListChanged(Player player) |
playerLastWorld.clear(); |
||||||
{ |
} |
||||||
final Location location = player.getLocation(); |
public synchronized boolean isRegionListChanged(Player player) |
||||||
final World world = location.getWorld(); |
{ |
||||||
final Set<String> playerRegions = new HashSet<>(); |
final Location location = player.getLocation(); |
||||||
// WorldGuard
|
final World world = location.getWorld(); |
||||||
if(worldguard != null && worldguard.isEnabled()) |
final Set<String> playerRegions = new HashSet<>(); |
||||||
try |
// WorldGuard
|
||||||
{ |
if(worldguard != null && worldguard.isEnabled()) |
||||||
final WorldGuardPlugin pluginWG = (WorldGuardPlugin)worldguard; |
try |
||||||
final RegionManager rman = pluginWG.getRegionManager(world); |
{ |
||||||
if(rman == null) |
final WorldGuardPlugin pluginWG = (WorldGuardPlugin)worldguard; |
||||||
return false; |
final RegionManager rman = pluginWG.getRegionManager(world); |
||||||
// Get list
|
if(rman == null) |
||||||
final ApplicableRegionSet appregs = rman.getApplicableRegions(location); |
return false; |
||||||
for(ProtectedRegion region : appregs) |
// Get list
|
||||||
playerRegions.add(region.getId()); |
final ApplicableRegionSet appregs = rman.getApplicableRegions(location); |
||||||
} catch(RuntimeException | IncompatibleClassChangeError ex) { |
for(ProtectedRegion region : appregs) |
||||||
worldguard = null; |
playerRegions.add(region.getId()); |
||||||
BukkitPluginMain.consoleLog.info(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_OLD.toString())); |
} catch(RuntimeException | IncompatibleClassChangeError ex) { |
||||||
} |
worldguard = null; |
||||||
// Residence
|
rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_WG_OLD.toString())); |
||||||
if(residence != null && residence.isEnabled()) |
} |
||||||
try |
// Residence
|
||||||
{ |
if(residence != null && residence.isEnabled()) |
||||||
// Get list
|
try |
||||||
final ResidenceManager residenceManager = ResidenceAPI.getResidenceManager(); |
{ |
||||||
if(residenceManager != null) |
// Get list
|
||||||
{ |
final ResidenceManager residenceManager = ResidenceAPI.getResidenceManager(); |
||||||
final ResidenceArea residenceArea = residenceManager.getByLocation(location); |
if(residenceManager != null) |
||||||
if(residenceArea != null) |
{ |
||||||
playerRegions.add(residenceArea.getFullName()); |
final ResidenceArea residenceArea = residenceManager.getByLocation(location); |
||||||
} |
if(residenceArea != null) |
||||||
} catch(RuntimeException ex) { |
playerRegions.add(residenceArea.getFullName()); |
||||||
} |
} |
||||||
// Is it changed?
|
} catch(RuntimeException ex) { |
||||||
int hashcode = playerRegions.hashCode(); |
} |
||||||
if(playerLastWorld.containsKey(player)) |
// Is it changed?
|
||||||
if(playerLastWorld.get(player).equals(world)) |
int hashcode = playerRegions.hashCode(); |
||||||
if(hashcode == playerRegionHashes.get(player)) |
if(playerLastWorld.containsKey(player)) |
||||||
return false; |
if(playerLastWorld.get(player).equals(world)) |
||||||
// Update
|
if(hashcode == playerRegionHashes.get(player)) |
||||||
playerRegionHashes.put(player, hashcode); |
return false; |
||||||
regionsByPlayer.put(player, playerRegions); |
// Update
|
||||||
playerLastWorld.put(player, world); |
playerRegionHashes.put(player, hashcode); |
||||||
return true; |
regionsByPlayer.put(player, playerRegions); |
||||||
} |
playerLastWorld.put(player, world); |
||||||
public synchronized Set<String> getPlayerRegions(Player player) |
return true; |
||||||
{ |
} |
||||||
Set<String> result = regionsByPlayer.get(player); |
public synchronized Set<String> getPlayerRegions(Player player) |
||||||
return (result != null) ? result : Collections.<String>emptySet(); |
{ |
||||||
} |
Set<String> result = regionsByPlayer.get(player); |
||||||
public synchronized void removePlayer(Player player) |
return (result != null) ? result : Collections.<String>emptySet(); |
||||||
{ |
} |
||||||
playerRegionHashes.remove(player); |
public synchronized void removePlayer(Player player) |
||||||
regionsByPlayer.remove(player); |
{ |
||||||
playerLastWorld.remove(player); |
playerRegionHashes.remove(player); |
||||||
} |
regionsByPlayer.remove(player); |
||||||
} |
playerLastWorld.remove(player); |
||||||
|
} |
||||||
|
} |
||||||
|
@ -1,159 +1,157 @@ |
|||||||
package ru.simsonic.rscPermissions; |
package ru.simsonic.rscPermissions; |
||||||
|
|
||||||
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; |
||||||
import org.bukkit.Bukkit; |
import org.bukkit.Bukkit; |
||||||
import org.bukkit.command.Command; |
import org.bukkit.command.Command; |
||||||
import org.bukkit.command.CommandSender; |
import org.bukkit.command.CommandSender; |
||||||
import org.bukkit.command.ConsoleCommandSender; |
import org.bukkit.command.ConsoleCommandSender; |
||||||
import org.bukkit.plugin.java.JavaPlugin; |
import org.bukkit.plugin.java.JavaPlugin; |
||||||
import org.bukkit.scheduler.BukkitScheduler; |
import org.bukkit.scheduler.BukkitScheduler; |
||||||
import org.mcstats.MetricsLite; |
import org.mcstats.MetricsLite; |
||||||
import ru.simsonic.rscPermissions.API.Settings; |
import ru.simsonic.rscPermissions.API.Settings; |
||||||
import ru.simsonic.rscPermissions.Engine.Backends.BackendDatabase; |
import ru.simsonic.rscPermissions.Engine.Backends.BackendDatabase; |
||||||
import ru.simsonic.rscPermissions.Engine.Backends.BackendJson; |
import ru.simsonic.rscPermissions.Engine.Backends.BackendJson; |
||||||
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents; |
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents; |
||||||
import ru.simsonic.rscPermissions.Bukkit.BukkitEventListener; |
import ru.simsonic.rscPermissions.Bukkit.BukkitEventListener; |
||||||
import ru.simsonic.rscPermissions.Bukkit.BukkitPermissionManager; |
import ru.simsonic.rscPermissions.Bukkit.BukkitPermissionManager; |
||||||
import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration; |
import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration; |
||||||
import ru.simsonic.rscPermissions.Bukkit.BukkitRegionProviders; |
import ru.simsonic.rscPermissions.Bukkit.BukkitRegionProviders; |
||||||
import ru.simsonic.rscPermissions.Bukkit.Commands.BukkitCommands; |
import ru.simsonic.rscPermissions.Bukkit.Commands.BukkitCommands; |
||||||
import ru.simsonic.rscPermissions.Bukkit.RegionUpdateObserver; |
import ru.simsonic.rscPermissions.Bukkit.RegionUpdateObserver; |
||||||
import ru.simsonic.rscPermissions.Engine.InternalCache; |
import ru.simsonic.rscPermissions.Engine.InternalCache; |
||||||
import ru.simsonic.rscPermissions.Engine.Phrases; |
import ru.simsonic.rscPermissions.Engine.Phrases; |
||||||
import ru.simsonic.rscUtilityLibrary.Bukkit.Commands.CommandAnswerException; |
import ru.simsonic.rscUtilityLibrary.Bukkit.Commands.CommandAnswerException; |
||||||
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; |
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; |
||||||
|
|
||||||
public final class BukkitPluginMain extends JavaPlugin |
public final class BukkitPluginMain extends JavaPlugin |
||||||
{ |
{ |
||||||
public static final Logger consoleLog = Bukkit.getLogger(); |
public static final Logger consoleLog = Bukkit.getLogger(); |
||||||
public final Settings settings = new BukkitPluginConfiguration(this); |
public final Settings settings = new BukkitPluginConfiguration(this); |
||||||
public final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this); |
public final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this); |
||||||
public final BukkitEventListener bukkitListener = new BukkitEventListener(this); |
public final BukkitEventListener bukkitListener = new BukkitEventListener(this); |
||||||
public final BackendJson localStorage = new BackendJson(getDataFolder()); |
public final BackendJson localStorage = new BackendJson(getDataFolder()); |
||||||
public final BackendDatabase connection = new BackendDatabase(consoleLog); |
public final BackendDatabase connection = new BackendDatabase(consoleLog); |
||||||
public final InternalCache internalCache = new InternalCache(); |
public final InternalCache internalCache = new InternalCache(); |
||||||
public final BukkitPermissionManager permissionManager = new BukkitPermissionManager(this); |
public final BukkitPermissionManager permissionManager = new BukkitPermissionManager(this); |
||||||
public final BukkitRegionProviders regionListProvider = new BukkitRegionProviders(this); |
public final BukkitRegionProviders regionListProvider = new BukkitRegionProviders(this); |
||||||
private final RegionUpdateObserver regionUpdateObserver = new RegionUpdateObserver(this); |
private final RegionUpdateObserver regionUpdateObserver = new RegionUpdateObserver(this); |
||||||
public final BukkitCommands commandHelper = new BukkitCommands(this); |
public final BukkitCommands commandHelper = new BukkitCommands(this); |
||||||
private MetricsLite metrics; |
private MetricsLite metrics; |
||||||
@Override |
@Override |
||||||
public void onLoad() |
public void onLoad() |
||||||
{ |
{ |
||||||
Phrases.extractTranslations(getDataFolder()); |
Phrases.extractTranslations(getDataFolder()); |
||||||
settings.onLoad(); |
settings.onLoad(); |
||||||
consoleLog.log(Level.INFO, "[rscp] This server`s ID is \"{0}\". You can change it in server.properties.", getServer().getServerId()); |
consoleLog.log(Level.INFO, "[rscp] serverId value is set to \"{0}\". You can change it in server.properties.", getServer().getServerId()); |
||||||
consoleLog.log(Level.INFO, "[rscp] rscPermissions has been loaded."); |
consoleLog.log(Level.INFO, "[rscp] rscPermissions has been loaded."); |
||||||
} |
} |
||||||
@Override |
@Override |
||||||
public void onEnable() |
public void onEnable() |
||||||
{ |
{ |
||||||
// Read settings and setup components
|
// Read settings and setup components
|
||||||
settings.readSettings(); |
settings.readSettings(); |
||||||
bukkitListener.onEnable(); |
bukkitListener.onEnable(); |
||||||
internalCache.setDefaultGroup( |
internalCache.setDefaultGroup( |
||||||
settings.getDefaultGroup(), |
settings.getDefaultGroup(), |
||||||
settings.isDefaultForever()); |
settings.isDefaultForever()); |
||||||
Phrases.applyTranslation(settings.getTranslationProvider()); |
Phrases.applyTranslation(settings.getTranslationProvider()); |
||||||
// Restore temporary cached data from json files
|
// Restore temporary cached data from json files
|
||||||
final DatabaseContents contents = localStorage.retrieveContents(); |
final DatabaseContents contents = localStorage.retrieveContents(); |
||||||
contents.filterServerId(getServer().getServerId()).filterLifetime(); |
contents.filterServerId(getServer().getServerId()).filterLifetime(); |
||||||
internalCache.fill(contents); |
internalCache.fill(contents); |
||||||
consoleLog.log(Level.INFO, |
getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic( |
||||||
"[rscp] Loaded {0} entity, {1} permission and {2} inheritance rows from local cache.", new Integer[] |
(Settings.chatPrefix + Phrases.FETCHED_LOCAL_CACHE.toString()) |
||||||
{ |
.replace("{:E}", String.valueOf(contents.entities.length)) |
||||||
contents.entities.length, |
.replace("{:P}", String.valueOf(contents.permissions.length)) |
||||||
contents.permissions.length, |
.replace("{:I}", String.valueOf(contents.inheritance.length)))); |
||||||
contents.inheritance.length, |
// Integrate Metrics
|
||||||
}); |
if(settings.isUseMetrics()) |
||||||
// Integrate Metrics
|
try |
||||||
if(settings.isUseMetrics()) |
{ |
||||||
try |
metrics = new MetricsLite(this); |
||||||
{ |
metrics.start(); |
||||||
metrics = new MetricsLite(this); |
consoleLog.info(Phrases.PLUGIN_METRICS.toString()); |
||||||
metrics.start(); |
} catch(IOException ex) { |
||||||
consoleLog.info(Phrases.PLUGIN_METRICS.toString()); |
consoleLog.log(Level.WARNING, "[rscp][Metrics] Exception: {0}", ex); |
||||||
} catch(IOException ex) { |
} |
||||||
consoleLog.log(Level.WARNING, "[rscp][Metrics] Exception: {0}", ex); |
// Register event's dispatcher
|
||||||
} |
getServer().getPluginManager().registerEvents(bukkitListener, this); |
||||||
// Register event's dispatcher
|
regionUpdateObserver.registerListeners(); |
||||||
getServer().getPluginManager().registerEvents(bukkitListener, this); |
// Integrate Vault and WEPIF
|
||||||
regionUpdateObserver.registerListeners(); |
bridgeForBukkit.setupVault(); |
||||||
// Integrate Vault and WEPIF
|
getServer().getScheduler().runTask(this, new Runnable() |
||||||
bridgeForBukkit.setupVault(); |
{ |
||||||
getServer().getScheduler().runTask(this, new Runnable() |
@Override |
||||||
{ |
public void run() |
||||||
@Override |
{ |
||||||
public void run() |
bridgeForBukkit.setupWEPIF(); |
||||||
{ |
} |
||||||
bridgeForBukkit.setupWEPIF(); |
}); |
||||||
} |
// WorldGuard, Residence and other possible region list providers
|
||||||
}); |
regionListProvider.integrate(); |
||||||
// WorldGuard, Residence and other possible region list providers
|
// Start all needed parallel threads as daemons
|
||||||
regionListProvider.integrate(); |
permissionManager.startDeamon(); |
||||||
// Start all needed parallel threads as daemons
|
regionUpdateObserver.startDeamon(); |
||||||
permissionManager.startDeamon(); |
// Connect to database and initiate data fetching
|
||||||
regionUpdateObserver.startDeamon(); |
connection.initialize(settings.getConnectionParams()); |
||||||
// Connect to database and initiate data fetching
|
if(settings.getAutoReloadDelayTicks() > 0) |
||||||
connection.initialize(settings.getConnectionParams()); |
commandHelper.threadFetchDatabaseContents.startDeamon(); |
||||||
if(settings.getAutoReloadDelayTicks() > 0) |
// Done
|
||||||
commandHelper.threadFetchDatabaseContents.startDeamon(); |
consoleLog.info(Phrases.PLUGIN_ENABLED.toString()); |
||||||
// Done
|
} |
||||||
consoleLog.info(Phrases.PLUGIN_ENABLED.toString()); |
@Override |
||||||
} |
public void onDisable() |
||||||
@Override |
{ |
||||||
public void onDisable() |
getServer().getServicesManager().unregisterAll(this); |
||||||
{ |
regionUpdateObserver.stop(); |
||||||
getServer().getServicesManager().unregisterAll(this); |
permissionManager.stop(); |
||||||
regionUpdateObserver.stop(); |
internalCache.clear(); |
||||||
permissionManager.stop(); |
connection.disconnect(); |
||||||
internalCache.clear(); |
regionListProvider.deintegrate(); |
||||||
connection.disconnect(); |
metrics = null; |
||||||
regionListProvider.deintegrate(); |
consoleLog.info(Phrases.PLUGIN_DISABLED.toString()); |
||||||
metrics = null; |
} |
||||||
consoleLog.info(Phrases.PLUGIN_DISABLED.toString()); |
private int nAutoUpdaterTaskId = -1; |
||||||
} |
public void scheduleAutoUpdate() |
||||||
private int nAutoUpdaterTaskId = -1; |
{ |
||||||
public void scheduleAutoUpdate() |
final BukkitScheduler scheduler = getServer().getScheduler(); |
||||||
{ |
if(nAutoUpdaterTaskId != -1) |
||||||
final BukkitScheduler scheduler = getServer().getScheduler(); |
scheduler.cancelTask(nAutoUpdaterTaskId); |
||||||
if(nAutoUpdaterTaskId != -1) |
final int delay = settings.getAutoReloadDelayTicks(); |
||||||
scheduler.cancelTask(nAutoUpdaterTaskId); |
nAutoUpdaterTaskId = delay > 0 |
||||||
final int delay = settings.getAutoReloadDelayTicks(); |
? scheduler.scheduleSyncDelayedTask(this, new Runnable() |
||||||
nAutoUpdaterTaskId = delay > 0 |
{ |
||||||
? scheduler.scheduleSyncDelayedTask(this, new Runnable() |
@Override |
||||||
{ |
public void run() |
||||||
@Override |
{ |
||||||
public void run() |
commandHelper.threadFetchDatabaseContents.startDeamon(); |
||||||
{ |
} |
||||||
commandHelper.threadFetchDatabaseContents.startDeamon(); |
}, delay) |
||||||
} |
: -1; |
||||||
}, delay) |
} |
||||||
: -1; |
@Override |
||||||
} |
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) |
||||||
@Override |
{ |
||||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) |
if(sender != null) |
||||||
{ |
try |
||||||
if(sender != null) |
{ |
||||||
try |
switch(cmd.getName().toLowerCase()) |
||||||
{ |
{ |
||||||
switch(cmd.getName().toLowerCase()) |
case "rscp": |
||||||
{ |
commandHelper.onCommandHub(sender, args); |
||||||
case "rscp": |
break; |
||||||
commandHelper.onCommandHub(sender, args); |
} |
||||||
break; |
} catch(CommandAnswerException ex) { |
||||||
} |
final boolean decolorize = Settings.decolorizeForConsole && sender instanceof ConsoleCommandSender; |
||||||
} catch(CommandAnswerException ex) { |
for(String answer : ex.getMessageArray()) |
||||||
final boolean decolorize = Settings.decolorizeForConsole && sender instanceof ConsoleCommandSender; |
{ |
||||||
for(String answer : ex.getMessageArray()) |
answer = GenericChatCodes.processStringStatic(Settings.chatPrefix + answer); |
||||||
{ |
final String textToSend = decolorize ? org.bukkit.ChatColor.stripColor(answer) : answer; |
||||||
answer = GenericChatCodes.processStringStatic(Settings.chatPrefix + answer); |
sender.sendMessage(textToSend); |
||||||
final String textToSend = decolorize ? org.bukkit.ChatColor.stripColor(answer) : answer; |
} |
||||||
sender.sendMessage(textToSend); |
} |
||||||
} |
return true; |
||||||
} |
} |
||||||
return true; |
} |
||||||
} |
|
||||||
} |
|
||||||
|
@ -1,68 +1,70 @@ |
|||||||
package ru.simsonic.rscPermissions.Engine; |
package ru.simsonic.rscPermissions.Engine; |
||||||
|
|
||||||
import java.io.File; |
import java.io.File; |
||||||
import java.io.FileOutputStream; |
import java.io.FileOutputStream; |
||||||
import java.io.IOException; |
import java.io.IOException; |
||||||
import java.io.InputStream; |
import java.io.InputStream; |
||||||
import java.nio.channels.Channels; |
import java.nio.channels.Channels; |
||||||
import java.nio.channels.FileChannel; |
import java.nio.channels.FileChannel; |
||||||
import ru.simsonic.rscPermissions.API.TranslationProvider; |
import ru.simsonic.rscPermissions.API.TranslationProvider; |
||||||
import ru.simsonic.rscPermissions.BukkitPluginMain; |
import ru.simsonic.rscPermissions.BukkitPluginMain; |
||||||
|
|
||||||
public enum Phrases |
public enum Phrases |
||||||
{ |
{ |
||||||
PLUGIN_ENABLED ("generic.enabled"), |
PLUGIN_ENABLED ("generic.enabled"), |
||||||
PLUGIN_DISABLED ("generic.disabled"), |
PLUGIN_DISABLED ("generic.disabled"), |
||||||
PLUGIN_METRICS ("generic.metrics"), |
PLUGIN_METRICS ("generic.metrics"), |
||||||
PLUGIN_RELOADED ("generic.reloaded"), |
PLUGIN_RELOADED ("generic.reloaded"), |
||||||
PLUGIN_PLAYER_ONLY ("generic.player-only"), |
PLUGIN_PLAYER_ONLY ("generic.player-only"), |
||||||
PLUGIN_CONSOLE_ONLY("generic.console-only"), |
PLUGIN_CONSOLE_ONLY("generic.console-only"), |
||||||
INTEGRATION_V_Y ("integration.vault-yes"), |
INTEGRATION_V_Y ("integration.vault-yes"), |
||||||
INTEGRATION_V_N ("integration.vault-no"), |
INTEGRATION_V_N ("integration.vault-no"), |
||||||
INTEGRATION_WE_Y ("integration.worldedit-yes"), |
INTEGRATION_WE_Y ("integration.worldedit-yes"), |
||||||
INTEGRATION_WE_N ("integration.worldedit-no"), |
INTEGRATION_WE_N ("integration.worldedit-no"), |
||||||
INTEGRATION_WG_Y ("integration.worldguard-yes"), |
INTEGRATION_WG_Y ("integration.worldguard-yes"), |
||||||
INTEGRATION_WG_N ("integration.worldguard-no"), |
INTEGRATION_WG_N ("integration.worldguard-no"), |
||||||
INTEGRATION_WG_OLD ("integration.worldguard-old"), |
INTEGRATION_WG_OLD ("integration.worldguard-old"), |
||||||
INTEGRATION_R_Y ("integration.residence-yes"), |
INTEGRATION_R_Y ("integration.residence-yes"), |
||||||
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"), |
||||||
MYSQL_FETCHED ("mysql.fetched"), |
FETCHED_ANSWER ("database.command-answer"), |
||||||
; |
FETCHED_LOCAL_CACHE("database.fetched-local"), |
||||||
private final String node; |
FETCHED_REMOTE_DB ("database.fetched-remote"), |
||||||
private String phrase; |
; |
||||||
private Phrases(String node) |
private final String node; |
||||||
{ |
private String phrase; |
||||||
this.node = node; |
private Phrases(String node) |
||||||
} |
{ |
||||||
@Override |
this.node = node; |
||||||
public String toString() |
} |
||||||
{ |
@Override |
||||||
return phrase; |
public String toString() |
||||||
} |
{ |
||||||
public static void applyTranslation(TranslationProvider provider) |
return phrase; |
||||||
{ |
} |
||||||
for(Phrases value : Phrases.values()) |
public static void applyTranslation(TranslationProvider provider) |
||||||
value.phrase = provider.getString(value.node); |
{ |
||||||
} |
for(Phrases value : Phrases.values()) |
||||||
public static void extractTranslations(File workingDir) |
value.phrase = provider.getString(value.node); |
||||||
{ |
} |
||||||
extractTranslation(workingDir, "english"); |
public static void extractTranslations(File workingDir) |
||||||
extractTranslation(workingDir, "russian"); |
{ |
||||||
} |
extractTranslation(workingDir, "english"); |
||||||
private static void extractTranslation(File workingDir, String langName) |
extractTranslation(workingDir, "russian"); |
||||||
{ |
} |
||||||
try |
private static void extractTranslation(File workingDir, String langName) |
||||||
{ |
{ |
||||||
final File langFile = new File(workingDir, langName + ".yml"); |
try |
||||||
if(langFile.isFile()) |
{ |
||||||
langFile.delete(); |
final File langFile = new File(workingDir, langName + ".yml"); |
||||||
final FileChannel fileChannel = new FileOutputStream(langFile).getChannel(); |
if(langFile.isFile()) |
||||||
fileChannel.force(true); |
langFile.delete(); |
||||||
final InputStream langStream = BukkitPluginMain.class.getResourceAsStream("/languages/" + langName + ".yml"); |
final FileChannel fileChannel = new FileOutputStream(langFile).getChannel(); |
||||||
fileChannel.transferFrom(Channels.newChannel(langStream), 0, Long.MAX_VALUE); |
fileChannel.force(true); |
||||||
} catch(IOException ex) { |
final InputStream langStream = BukkitPluginMain.class.getResourceAsStream("/languages/" + langName + ".yml"); |
||||||
} |
fileChannel.transferFrom(Channels.newChannel(langStream), 0, Long.MAX_VALUE); |
||||||
} |
} catch(IOException ex) { |
||||||
} |
} |
||||||
|
} |
||||||
|
} |
||||||
|
@ -1,22 +1,24 @@ |
|||||||
generic: |
generic: |
||||||
enabled: "[rscp] rscPermissions has been successfully enabled." |
enabled: "[rscp] rscPermissions has been successfully enabled." |
||||||
disabled: "[rscp] rscPermissions has been disabled." |
disabled: "[rscp] rscPermissions has been disabled." |
||||||
reloaded: "[rscp] rscPermissions has been reloaded." |
reloaded: "[rscp] rscPermissions has been reloaded." |
||||||
metrics: "[rscp] Metrics enabled." |
metrics: "[rscp] Metrics enabled." |
||||||
player-only: "{_LR}This command cannot be run from console." |
player-only: "{_LR}This command cannot be run from console." |
||||||
console-only: "{_LR}This command should be run from console." |
console-only: "{_LR}This command should be run from console." |
||||||
integration: |
integration: |
||||||
vault-yes: "{_LG}Vault was found and integrated." |
vault-yes: "{_LG}Vault was found and integrated." |
||||||
vault-no: "{_LR}There is no Vault found. Vault is highly recommended to be installed on your server." |
vault-no: "{_LR}There is no Vault found. Vault is highly recommended to be installed on your server." |
||||||
worldedit-yes: "{_LG}WorldEdit (WEPIF) was found and integrated." |
worldedit-yes: "{_LG}WorldEdit (WEPIF) was found and integrated." |
||||||
worldedit-no: "{_YL}WorldEdit (WEPIF) was not found." |
worldedit-no: "{_YL}WorldEdit (WEPIF) was not found." |
||||||
worldguard-yes: "{_LG}WorldGuard was found and integrated." |
worldguard-yes: "{_LG}WorldGuard was found and integrated." |
||||||
worldguard-no: "{_YL}WorldGuard was not found." |
worldguard-no: "{_YL}WorldGuard was not found." |
||||||
worldguard-old: "{_LR}WorldGuard 5.9 or older is found, I need 6.0 or later. {_YL}Region support for WG is disabled." |
worldguard-old: "{_LR}WorldGuard 5.9 or older is found, I need 6.0 or later. {_YL}Region support for WG is disabled." |
||||||
residence-yes: "{_LG}Residence was found and integrated." |
residence-yes: "{_LG}Residence was found and integrated." |
||||||
residence-no: "{_YL}Residence was not found." |
residence-no: "{_YL}Residence was not found." |
||||||
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." |
||||||
mysql: |
database: |
||||||
fetched: "Tables have been fetched." |
command-answer: "Tables have been fetched." |
||||||
|
fetched-local: "{_LG}Loaded {:E} entity, {:P} permission and {:I} inheritance rows from local cache." |
||||||
|
fetched-remote: "{_LG}Fetched {:E} entities, {:P} permissions and {:I} inheritances." |
||||||
|
@ -1,22 +1,24 @@ |
|||||||
generic: |
generic: |
||||||
enabled: "[rscp] Плагин rscPermissions успешно включён." |
enabled: "[rscp] Плагин rscPermissions успешно включён." |
||||||
disabled: "[rscp] Плагин rscPermissions выключен." |
disabled: "[rscp] Плагин rscPermissions выключен." |
||||||
reloaded: "[rscp] Плагин rscPermissions перезапущен, конфигурация перечитана." |
reloaded: "[rscp] Плагин rscPermissions перезапущен, конфигурация перечитана." |
||||||
metrics: "[rscp] Включён сбор метрики (mcstats.org)." |
metrics: "[rscp] Включён сбор метрики (mcstats.org)." |
||||||
player-only: "{_LR}Эта команда не может быть использована из консоли." |
player-only: "{_LR}Эта команда не может быть использована из консоли." |
||||||
console-only: "{_LR}Эта команда может быть использована только из консоли." |
console-only: "{_LR}Эта команда может быть использована только из консоли." |
||||||
integration: |
integration: |
||||||
vault-yes: "{_LG}Vault обнаружён и подключён." |
vault-yes: "{_LG}Vault обнаружён и подключён." |
||||||
vault-no: "{_LR}Не удаётся найти плагин Vault. Рекомендуется его скорейшая установка." |
vault-no: "{_LR}Не удаётся найти плагин Vault. Рекомендуется его скорейшая установка." |
||||||
worldedit-yes: "{_LG}WorldEdit (WEPIF) обнаружён и подключён." |
worldedit-yes: "{_LG}WorldEdit (WEPIF) обнаружён и подключён." |
||||||
worldedit-no: "{_YL}WorldEdit (WEPIF) не обнаружен." |
worldedit-no: "{_YL}WorldEdit (WEPIF) не обнаружен." |
||||||
worldguard-yes: "{_LG}WorldGuard обнаружён и подключён." |
worldguard-yes: "{_LG}WorldGuard обнаружён и подключён." |
||||||
worldguard-no: "{_YL}WorldGuard не обнаружен." |
worldguard-no: "{_YL}WorldGuard не обнаружен." |
||||||
worldguard-old: "{_LR}Найден WorldGuard 5.9 или старше, но для работы требуется версия 6.0 или новее. {_YL}Поддержка регионов WG будет отключена." |
worldguard-old: "{_LR}Найден WorldGuard 5.9 или старше, но для работы требуется версия 6.0 или новее. {_YL}Поддержка регионов WG будет отключена." |
||||||
residence-yes: "{_LG}Residence обнаружён и подключён." |
residence-yes: "{_LG}Residence обнаружён и подключён." |
||||||
residence-no: "{_YL}Residence не обнаружен." |
residence-no: "{_YL}Residence не обнаружен." |
||||||
debug: |
debug: |
||||||
enable: "Теперь Вы будете видеть отладочную информацию." |
enable: "Теперь Вы будете видеть отладочную информацию." |
||||||
disable: "Отладочная информация теперь скрыта от Вас." |
disable: "Отладочная информация теперь скрыта от Вас." |
||||||
mysql: |
database: |
||||||
fetched: "База данных перечитана." |
command-answer: "База данных перечитана." |
||||||
|
fetched-local: "{_LG}Восстановлено {:E} сущностей, {:P} прав and {:I} наследований." |
||||||
|
fetched-remote: "{_LG}Получено {:E} сущностей, {:P} прав and {:I} наследований." |
||||||
|
Loading…
Reference in new issue