From c7adbcb378514f56e051ea4a564829f68086d812 Mon Sep 17 00:00:00 2001 From: Stanislav Usenkov Date: Thu, 12 Feb 2015 16:06:26 +0600 Subject: [PATCH] It's a working a bit. But no permissions are calculated for online players. --- .../rscPermissions/Bukkit/BukkitCommands.java | 7 +--- .../Bukkit/BukkitMaintenance.java | 38 ++++++++++--------- .../Bukkit/BukkitPermissionManager.java | 29 ++++++++++++-- .../Bukkit/PlayerEventsListener.java | 4 +- .../rscPermissions/BukkitPluginMain.java | 3 +- 5 files changed, 51 insertions(+), 30 deletions(-) diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java index 47784cd..4985653 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java @@ -256,12 +256,7 @@ public class BukkitCommands { case "permissions": list.add("{MAGENTA}Permission list for {_YL}" + player.getName()); - final PermissionAttachment pa = rscp.permissionManager.attachments.get(player); - if(pa == null) - break; - final Map pv = pa.getPermissions(); - if(pv == null) - break; + final Map pv = rscp.permissionManager.listPlayerPermissions(player); final ArrayList sorted_keys = new ArrayList<>(pv.keySet()); Collections.sort(sorted_keys); for(String perm : sorted_keys) diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java index 3c4533e..ef046a3 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java @@ -11,19 +11,23 @@ import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; public class BukkitMaintenance implements Listener { - private final BukkitPluginMain plugin; + private final BukkitPluginMain rscp; public BukkitMaintenance(BukkitPluginMain rscp) { - this.plugin = rscp; + this.rscp = rscp; + } + public void onEnable() + { + rscp.getServer().getPluginManager().registerEvents(this, rscp); } @org.bukkit.event.EventHandler public void onServerPing(ServerListPingEvent event) { - if(plugin.settings.isInMaintenance()) + if(rscp.settings.isInMaintenance()) { String motd = "Server is under maintenance"; - motd = plugin.getConfig().getString("language.maintenance.locked.default.motd", motd); - motd = plugin.getConfig().getString("language.maintenance.locked." + plugin.settings.getMaintenanceMode() + ".motd", motd); + motd = rscp.getConfig().getString("language.maintenance.locked.default.motd", motd); + motd = rscp.getConfig().getString("language.maintenance.locked." + rscp.settings.getMaintenanceMode() + ".motd", motd); motd = GenericChatCodes.processStringStatic(motd); if(!"".equals(motd)) event.setMotd(motd); @@ -32,18 +36,18 @@ public class BukkitMaintenance implements Listener @org.bukkit.event.EventHandler public void onAsyncPlayerPreLogin(AsyncPlayerPreLoginEvent event) { - if("".equals(plugin.settings.getMaintenanceMode())) + if("".equals(rscp.settings.getMaintenanceMode())) { event.allow(); return; } final String permissionAll = "rscp.maintenance.*"; - final String permission_mm = "rscp.maintenance." + (plugin.settings.getMaintenanceMode()); + final String permission_mm = "rscp.maintenance." + (rscp.settings.getMaintenanceMode()); final HashMap permissions = new HashMap<>(); try { final String name = event.getName(); - plugin.internalCache.resolvePlayer(name, plugin.getServer().getServerId()); + rscp.internalCache.resolvePlayer(name, rscp.getServer().getServerId()); // permissions.putAll(plugin.cache.mapPermissions.get(name)); } catch(RuntimeException ex) { } @@ -51,7 +55,7 @@ public class BukkitMaintenance implements Listener { final UUID uuid = event.getUniqueId(); final String userFriendlyUniqueId = uuid.toString().replace("-", "").toLowerCase(); - plugin.internalCache.resolvePlayer(userFriendlyUniqueId, plugin.getServer().getServerId()); + rscp.internalCache.resolvePlayer(userFriendlyUniqueId, rscp.getServer().getServerId()); // permissions.putAll(plugin.cache.mapPermissions.get(userFriendlyUniqueId)); } catch(RuntimeException | NoSuchMethodError ex) { } @@ -62,17 +66,17 @@ public class BukkitMaintenance implements Listener return; } String kickMsg = "{_YL}Server is in maintenance mode\nPlease try to connect later..."; - kickMsg = plugin.getConfig().getString("language.maintenance.locked.default.motd", kickMsg); - kickMsg = plugin.getConfig().getString("language.maintenance.locked." + plugin.settings.getMaintenanceMode() + ".motd", kickMsg); + kickMsg = rscp.getConfig().getString("language.maintenance.locked.default.motd", kickMsg); + kickMsg = rscp.getConfig().getString("language.maintenance.locked." + rscp.settings.getMaintenanceMode() + ".motd", kickMsg); kickMsg = GenericChatCodes.processStringStatic(kickMsg); event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST, kickMsg); } public void setMaintenanceMode(String mMode) { - plugin.settings.setMaintenanceMode(mMode); - if(!plugin.settings.isInMaintenance()) + rscp.settings.setMaintenanceMode(mMode); + if(!rscp.settings.isInMaintenance()) return; - plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() + rscp.getServer().getScheduler().scheduleSyncDelayedTask(rscp, new Runnable() { @Override public void run() @@ -82,11 +86,11 @@ public class BukkitMaintenance implements Listener { if(player.hasPermission("rscp.maintenance.*")) continue; - if(player.hasPermission("rscp.maintenance." + plugin.settings.getMaintenanceMode())) + if(player.hasPermission("rscp.maintenance." + rscp.settings.getMaintenanceMode())) continue; String kick = "{_YL}Server is going into maintenance mode"; - kick = plugin.getConfig().getString("language.maintenance.locked.default.kick", kick); - kick = plugin.getConfig().getString("language.maintenance.locked." + plugin.settings.getMaintenanceMode() + ".kick", kick); + kick = rscp.getConfig().getString("language.maintenance.locked.default.kick", kick); + kick = rscp.getConfig().getString("language.maintenance.locked." + rscp.settings.getMaintenanceMode() + ".kick", kick); kick = GenericChatCodes.processStringStatic(kick); player.kickPlayer(kick); } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java index 2c0c411..926f42c 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java @@ -1,6 +1,9 @@ package ru.simsonic.rscPermissions.Bukkit; +import java.net.InetSocketAddress; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; +import java.util.Map; import java.util.Set; import java.util.concurrent.LinkedBlockingQueue; import org.bukkit.entity.Player; @@ -19,11 +22,11 @@ public class BukkitPermissionManager extends RestartableThread this.rscp = plugin; } private final LinkedBlockingQueue updateQueue = new LinkedBlockingQueue<>(); - private final HashMap prefixes = new HashMap<>(); - private final HashMap suffixes = new HashMap<>(); + private final HashMap attachments = new HashMap<>(); private final HashMap persistentPermissions = new HashMap<>(); private final HashMap transientPermissions = new HashMap<>(); - public final HashMap attachments = new HashMap<>(); + private final HashMap prefixes = new HashMap<>(); + private final HashMap suffixes = new HashMap<>(); public void recalculateOnlinePlayersSync() { try @@ -58,6 +61,22 @@ public class BukkitPermissionManager extends RestartableThread } catch(InterruptedException ex) { } } + public Map listPlayerPermissions(Player player) + { + final PermissionAttachment attachment = rscp.permissionManager.attachments.get(player); + if(attachment != null) + return attachment.getPermissions(); + return Collections.EMPTY_MAP; + } + public void removePlayer(Player player) + { + updateQueue.remove(player); + attachments.remove(player); + prefixes.remove(player); + suffixes.remove(player); + persistentPermissions.remove(player); + transientPermissions.remove(player); + } @Override public void run() { @@ -143,7 +162,9 @@ public class BukkitPermissionManager extends RestartableThread // minecraft <= 1.7.x } // IP address of a Player can be used as entity name too - result.add(player.getAddress().getAddress().getHostAddress()); + InetSocketAddress socketAddress = player.getAddress(); + if(socketAddress != null) + result.add(socketAddress.getAddress().getHostAddress()); return result.toArray(new String[result.size()]); } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java index 94be934..eb3d41d 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java @@ -45,13 +45,13 @@ public class PlayerEventsListener implements Listener @EventHandler public void onPlayerKick(PlayerKickEvent event) { - rscp.permissionManager.attachments.remove(event.getPlayer()); + rscp.permissionManager.removePlayer(event.getPlayer()); rscp.regionListProvider.removePlayer(event.getPlayer()); } @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { - rscp.permissionManager.attachments.remove(event.getPlayer()); + rscp.permissionManager.removePlayer(event.getPlayer()); rscp.regionListProvider.removePlayer(event.getPlayer()); } } diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java index 24dda86..745f06c 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java @@ -52,7 +52,8 @@ public final class BukkitPluginMain extends JavaPlugin { settings.readSettings(); // Register event's dispatcher - getServer().getPluginManager().registerEvents(maintenance, this); + maintenance.onEnable(); + getServer().getPluginManager().registerEvents(bukkitListener, this); regionUpdateObserver.registerListeners(); // WorldGuard, Residence and other possible region list providers regionListProvider.integrate();