diff --git a/README b/README index e8a2e35..c562159 100644 --- a/README +++ b/README @@ -215,6 +215,10 @@ Bukkit Issue: Stargate will randomly NPE when drawing a sign. Long-standing Bukk ============= Changes ============= +[Version 0.7.9.6] + - Actually remove the player from the BungeeQueue when they connect. Oops :) + - Implement stargate.server nodes + - Improve the use of negation. You can now negate networks/worlds/servers while using stargate.use permissions. [Version 0.7.9.5] - Fixed an issue with portal material not showing up (Oh, that code WAS useful) [Version 0.7.9.4] diff --git a/src/net/TheDgtl/Stargate/Stargate.java b/src/net/TheDgtl/Stargate/Stargate.java index c434ad3..884acfc 100644 --- a/src/net/TheDgtl/Stargate/Stargate.java +++ b/src/net/TheDgtl/Stargate/Stargate.java @@ -418,10 +418,8 @@ public class Stargate extends JavaPlugin { * Check whether player can teleport to dest world */ public static boolean canAccessWorld(Player player, String world) { - // Can use all Stargate player features - if (hasPerm(player, "stargate.use")) return true; - // Can access all worlds - if (hasPerm(player, "stargate.world")) { + // Can use all Stargate player features or access all worlds + if (hasPerm(player, "stargate.use") || hasPerm(player, "stargate.world")) { // Do a deep check to see if the player lacks this specific world node if (!hasPermDeep(player, "stargate.world." + world)) return false; return true; @@ -435,10 +433,8 @@ public class Stargate extends JavaPlugin { * Check whether player can use network */ public static boolean canAccessNetwork(Player player, String network) { - // Can use all Stargate player features - if (hasPerm(player, "stargate.use")) return true; - // Can access all networks - if (hasPerm(player, "stargate.network")) { + // Can user all Stargate player features, or access all networks + if (hasPerm(player, "stargate.use") || hasPerm(player, "stargate.network")) { // Do a deep check to see if the player lacks this specific network node if (!hasPermDeep(player, "stargate.network." + network)) return false; return true; @@ -446,12 +442,27 @@ public class Stargate extends JavaPlugin { // Can access this network if (hasPerm(player, "stargate.network." + network)) return true; // Is able to create personal gates (Assumption is made they can also access them) - String playerName = player.getName(); + String playerName = player.getName().toLowerCase(); if (playerName.length() > 11) playerName = playerName.substring(0, 11); if (network.equals(playerName) && hasPerm(player, "stargate.create.personal")) return true; return false; } + /* + * Check whether the player can access this server + */ + public static boolean canAccessServer(Player player, String server) { + // Can user all Stargate player features, or access all servers + if (hasPerm(player, "stargate.use") || hasPerm(player, "stargate.servers")) { + // Do a deep check to see if the player lacks this specific server node + if (!hasPermDeep(player, "stargate.server." + server)) return false; + return true; + } + // Can access this server + if (hasPerm(player, "stargate.server." + server)) return true; + return false; + } + /* * Call the StargateAccessPortal event, used for other plugins to bypass Permissions checks */ @@ -736,7 +747,7 @@ public class Stargate extends JavaPlugin { if (!enableBungee) return; Player player = event.getPlayer(); - String destination = bungeeQueue.get(player.getName().toLowerCase()); + String destination = bungeeQueue.remove(player.getName().toLowerCase()); if (destination == null) return; Portal portal = Portal.getBungeeGate(destination); @@ -802,15 +813,21 @@ public class Stargate extends JavaPlugin { if (!portal.isBungee() && destination == null) return; boolean deny = false; - // Check if player has access to this network - // For Bungee gates this will be the target server name - if (!canAccessNetwork(player, portal.getNetwork())) { - deny = true; - } - - // Check if player has access to destination world - if (!portal.isBungee() && !canAccessWorld(player, destination.getWorld().getName())) { - deny = true; + // Check if player has access to this server for Bungee gates + if (portal.isBungee()) { + if (!canAccessServer(player, portal.getNetwork())) { + deny = true; + } + } else { + // Check if player has access to this network + if (!canAccessNetwork(player, portal.getNetwork())) { + deny = true; + } + + // Check if player has access to destination world + if (!canAccessWorld(player, destination.getWorld().getName())) { + deny = true; + } } if (!canAccessPortal(player, portal, deny)) { diff --git a/src/plugin.yml b/src/plugin.yml index c1cd59b..9a7f756 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Stargate main: net.TheDgtl.Stargate.Stargate -version: 0.7.9.5 +version: 0.7.9.6 description: Stargate mod for Bukkit author: Drakia website: http://www.thedgtl.net