Browse Source

Version is 0.9.9b:

* Implemented feature to control player connections with slot limits.
* Implemented three Vault's playerInGroup() methods.
master
SimSonic 10 years ago
parent
commit
313d0bfff7
  1. 2
      pom.xml
  2. 3
      src/main/java/ru/simsonic/rscPermissions/API/Settings.java
  3. 41
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitEventListener.java
  4. 26
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java
  5. 13
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java
  6. 5
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java
  7. 31
      src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java
  8. 29
      src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
  9. 2
      src/main/java/ru/simsonic/rscPermissions/SpongePluginMain.java
  10. 11
      src/main/resources/config.yml

2
pom.xml

@ -4,7 +4,7 @@
<groupId>ru.simsonic</groupId>
<artifactId>rscPermissions</artifactId>
<version>0.9.8a</version>
<version>0.9.9a</version>
<packaging>jar</packaging>
<name>rscPermissions</name>

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

@ -1,4 +1,5 @@
package ru.simsonic.rscPermissions.API;
import java.util.Map;
import ru.simsonic.rscUtilityLibrary.ConnectionMySQL.ConnectionParams;
public interface Settings
@ -8,6 +9,7 @@ public interface Settings
public static final String separatorRegExp = "\\.";
public static final String instantiator = "?";
public static final String textInheriter = "%";
public static final boolean decolorizeForConsole = false;
public void onLoad();
public void readSettings();
public String getDefaultGroup();
@ -21,6 +23,7 @@ public interface Settings
public long getRegionFinderGranularity();
public int getAutoReloadDelayTicks();
public boolean isUseMetrics();
public Map<String, Integer> getSlotLimits();
public TranslationProvider getTranslationProvider();
public ConnectionParams getConnectionParams();
}

41
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitEventListener.java

@ -1,6 +1,7 @@
package ru.simsonic.rscPermissions.Bukkit;
import java.util.ArrayList;
import org.bukkit.Bukkit;
import java.util.Collections;
import java.util.Map;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -20,10 +21,15 @@ import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
public class BukkitEventListener implements Listener
{
private final BukkitPluginMain rscp;
private Map<String, Integer> slotLimits = Collections.emptyMap();
public BukkitEventListener(BukkitPluginMain plugin)
{
this.rscp = plugin;
}
public void onEnable()
{
slotLimits = rscp.settings.getSlotLimits();
}
@EventHandler
public void onPlayerAsyncPreLogin(AsyncPlayerPreLoginEvent event)
{
@ -41,7 +47,12 @@ public class BukkitEventListener implements Listener
identifiers.add(event.getAddress().getHostAddress());
// Resolution
final ResolutionResult resolution = rscp.internalCache.resolvePlayer(identifiers.toArray(new String[identifiers.size()]));
processMaintenanceLogin(event, resolution);
// Maintenance mode limits
if(event.getLoginResult() == AsyncPlayerPreLoginEvent.Result.ALLOWED)
processMaintenanceLogin(event, resolution);
// Empty slots limits
if(event.getLoginResult() == AsyncPlayerPreLoginEvent.Result.ALLOWED)
processLimitedSlotsLogin(event, resolution);
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerLogin(PlayerLoginEvent event)
@ -100,6 +111,30 @@ public class BukkitEventListener implements Listener
"{_YL}Server is in maintenance mode\nPlease try to connect later...");
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST, kickMsg);
}
private void processLimitedSlotsLogin(AsyncPlayerPreLoginEvent event, ResolutionResult resolution)
{
boolean allowed = true;
int freeSlots = rscp.getServer().getMaxPlayers() - Tools.getOnlinePlayers().size();
for(Map.Entry<String, Integer> limit : slotLimits.entrySet())
{
boolean permission = resolution.hasPermission("rscp.limits." + limit.getKey());
if(freeSlots > limit.getValue())
if(permission)
{
allowed = true;
break;
} else
allowed = permission;
}
if(allowed)
{
event.allow();
return;
}
final String kickMsg = GenericChatCodes.processStringStatic(
"{_LR}Server is too full to allow you enter.\n{_YL}Please try to connect later...");
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST, kickMsg);
}
public void setMaintenanceMode(String mMode)
{
rscp.settings.setMaintenanceMode(mMode);
@ -117,7 +152,7 @@ public class BukkitEventListener implements Listener
if(player.hasPermission("rscp.maintenance." + rscp.settings.getMaintenanceMode()))
continue;
final String kick = GenericChatCodes.processStringStatic(
"{_YL}Server is going into maintenance mode. Please connect later.");
"{_LR}Server is going into maintenance mode.\n{_YL}Please try to connect later...");
player.kickPlayer(kick);
}
}

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

@ -26,15 +26,12 @@ public class BukkitPermissionManager extends RestartableThread
{
this.rscp = plugin;
}
private final Map<String, ResolutionResult> resolutions = new ConcurrentHashMap<>();
private final LinkedBlockingQueue<Player> updateQueue = new LinkedBlockingQueue<>();
private final Map<String, ResolutionResult> resolutions = new ConcurrentHashMap<>();
private final Map<Player, PermissionAttachment> attachments = new HashMap<>();
private final Map<Player, Map<String, Boolean>> persistentPermissions = new HashMap<>();
private final Map<Player, Map<String, Boolean>> transientPermissions = new HashMap<>();
private final Map<Player, Set<String>> groups = new ConcurrentHashMap<>();
private final Map<Player, String> prefixes = new ConcurrentHashMap<>();
private final Map<Player, String> suffixes = new ConcurrentHashMap<>();
private final Set<Player> debug = new HashSet<>();
private final Map<Player, Map<String, Boolean>> persistent = new HashMap<>();
private final Map<Player, Map<String, Boolean>> temporary = new HashMap<>();
private final Set<Player> debug = new HashSet<>();
public void recalculateOnlinePlayers()
{
updateQueue.addAll(Tools.getOnlinePlayers());
@ -79,10 +76,8 @@ public class BukkitPermissionManager extends RestartableThread
{
updateQueue.remove(player);
attachments.remove(player);
prefixes.remove(player);
suffixes.remove(player);
persistentPermissions.remove(player);
transientPermissions.remove(player);
persistent.remove(player);
temporary.remove(player);
synchronized(debug)
{
debug.remove(player);
@ -98,10 +93,7 @@ public class BukkitPermissionManager extends RestartableThread
for(Player current = updateQueue.take(); current != null; current = updateQueue.take())
{
final ResolutionResult result = rscp.permissionManager.resolvePlayer(current);
groups.put(current, result.groups);
prefixes.put(current, result.prefix);
suffixes.put(current, result.suffix);
persistentPermissions.put(current, result.permissions);
persistent.put(current, result.permissions);
final Player player = current;
rscp.getServer().getScheduler().runTask(rscp, new Runnable()
{
@ -114,11 +106,11 @@ public class BukkitPermissionManager extends RestartableThread
// Create new and fill with permissions
final PermissionAttachment attachment = player.addAttachment(rscp);
attachments.put(player, attachment);
final Map<String, Boolean> pp = persistentPermissions.get(player);
final Map<String, Boolean> pp = persistent.get(player);
if(pp != null && !pp.isEmpty())
for(Map.Entry<String, Boolean> row : pp.entrySet())
attachment.setPermission(row.getKey(), row.getValue());
final Map<String, Boolean> tp = transientPermissions.get(player);
final Map<String, Boolean> tp = temporary.get(player);
if(tp != null && !tp.isEmpty())
for(Map.Entry<String, Boolean> row : tp.entrySet())
attachment.setPermission(row.getKey(), row.getValue());

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

@ -1,5 +1,8 @@
package ru.simsonic.rscPermissions.Bukkit;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import ru.simsonic.rscPermissions.API.Settings;
@ -156,4 +159,14 @@ public class BukkitPluginConfiguration implements Settings
result.prefixes = config.getString("settings.connection.prefixes", "rscp_");
return result;
}
@Override
public Map<String, Integer> getSlotLimits()
{
final FileConfiguration config = plugin.getConfig();
final ConfigurationSection limits = config.getConfigurationSection("settings.slot-limits");
final Map<String, Integer> result = new HashMap<>();
for(String limit : limits.getKeys(false))
result.put(limit, limits.getInt(limit));
return result;
}
}

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

@ -319,11 +319,6 @@ public class BukkitCommands
for(String group : rscp.bridgeForBukkit.getPermission().getPlayerGroups(player))
list.add("{_LG}" + group);
throw new CommandAnswerException(list);
/*
case "ranks":
list.add("{MAGENTA}Ranks of player {_YL}" + player.getName() + "{MAGENTA}:");
throw new CommandAnswerException(list);
*/
}
throw new CommandAnswerException(list);
case "prefix":

31
src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java

@ -66,12 +66,6 @@ public final class VaultPermission extends net.milkbowl.vault.permission.Permiss
}
@Override
@Deprecated
public boolean playerInGroup(String world, String player, String group)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
@Deprecated
public boolean playerAddGroup(String world, String player, String group)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
@ -194,34 +188,43 @@ public final class VaultPermission extends net.milkbowl.vault.permission.Permiss
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerInGroup(String world, OfflinePlayer player, String group)
public boolean playerAddGroup(String world, OfflinePlayer player, String group)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerInGroup(Player player, String group)
public boolean playerAddGroup(Player player, String group)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddGroup(String world, OfflinePlayer player, String group)
public boolean playerRemoveGroup(String world, OfflinePlayer player, String group)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddGroup(Player player, String group)
public boolean playerRemoveGroup(Player player, String group)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemoveGroup(String world, OfflinePlayer player, String group)
@Deprecated
public boolean playerInGroup(String world, String player, String group)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.groups.contains(group);
}
@Override
public boolean playerRemoveGroup(Player player, String group)
public boolean playerInGroup(String world, OfflinePlayer player, String group)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.groups.contains(group);
}
@Override
public boolean playerInGroup(Player player, String group)
{
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.groups.contains(group);
}
@Override
@Deprecated

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

@ -5,6 +5,7 @@ import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitScheduler;
import org.mcstats.MetricsLite;
@ -48,7 +49,9 @@ public final class BukkitPluginMain extends JavaPlugin
@Override
public void onEnable()
{
// Read settings and setup components
settings.readSettings();
bukkitListener.onEnable();
internalCache.setDefaultGroup(
settings.getDefaultGroup(),
settings.isDefaultForever());
@ -121,18 +124,24 @@ public final class BukkitPluginMain extends JavaPlugin
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
{
try
{
switch(cmd.getName().toLowerCase())
if(sender != null)
try
{
case "rscp":
commandHelper.onCommandHub(sender, args);
break;
switch(cmd.getName().toLowerCase())
{
case "rscp":
commandHelper.onCommandHub(sender, args);
break;
}
} catch(CommandAnswerException ex) {
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;
sender.sendMessage(textToSend);
}
}
} catch(CommandAnswerException ex) {
for(String answer : ex.getMessageArray())
sender.sendMessage(GenericChatCodes.processStringStatic(Settings.chatPrefix + answer));
}
return true;
}
}

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

@ -6,7 +6,7 @@ import org.spongepowered.api.event.state.ServerStoppedEvent;
import org.spongepowered.api.event.state.ServerStoppingEvent;
import org.spongepowered.api.plugin.Plugin;
@Plugin(id = "rscPermissions", name = "rscPermissions", version = "0.9.0b")
@Plugin(id = "rscPermissions", name = "rscPermissions", version = "0.9.9b")
public class SpongePluginMain
{
public void onServerStart(ServerAboutToStartEvent event)

11
src/main/resources/config.yml

@ -1,19 +1,22 @@
settings:
default-group: Default
always-inherit-default-group: false
always-inherit-default-group: true
treat-asterisk-as-op: true
auto-reload-delay-sec: 900
use-metrics: true
language: english
maintenance-mode: ''
region-finder-thread-granularity-msec: 1000
integration:
worldguard: true
residence: true
use-metrics: true
connection:
database: localhost:3306/minecraft
username: user1
password: pass1
prefixes: rscp_
slot-limits:
administrators: 5
premium: 25
maintenance-mode: ''
language: english
internal:
version: 3

Loading…
Cancel
Save