diff --git a/README b/README index 504d519..b025d53 100644 --- a/README +++ b/README @@ -81,6 +81,13 @@ gate-folder - The folder containing your .gate files ============= Changes ============= +[Version 0.18] + - Small permissions handling update. +[Version 0.17] + - Core GM support removed, depends on FakePermissions if you use GM. +[Version 0.16] + - Fixed Permissions, will work with GroupManager, Permissions 2.0, or Permissions 2.1 + - Left-clicking to activate a stargate works again [Version 0.15] - Built against b424jnks -- As such nothing lower is supported at the moment. - Moved gate destruction code to onBlockBreak since onBlockDamage no longer handles breaking blocks. diff --git a/src/net/TheDgtl/Stargate/Portal.java b/src/net/TheDgtl/Stargate/Portal.java index 72a6f5d..badb1d5 100644 --- a/src/net/TheDgtl/Stargate/Portal.java +++ b/src/net/TheDgtl/Stargate/Portal.java @@ -351,7 +351,7 @@ public class Portal { return owner; } - public void activate(Player player) { + public void activate(Player player, Stargate stargate) { destinations.clear(); destination = ""; drawSign(); @@ -362,7 +362,7 @@ public class Portal { // Not fixed, not this portal, and visible to this player. if ( (!portal.isFixed()) && (!dest.equalsIgnoreCase(getName())) && // Not this portal - (!portal.isHidden() || Stargate.hasPerm(player, "stargate.hidden", player.isOp()) || portal.getOwner().equals(player.getName())) + (!portal.isHidden() || stargate.hasPerm(player, "stargate.hidden", player.isOp()) || portal.getOwner().equals(player.getName())) ) { destinations.add(portal.getName()); } @@ -396,9 +396,9 @@ public class Portal { return openTime; } - public void cycleDestination(Player player) { + public void cycleDestination(Player player, Stargate stargate) { if (!isActive() || getActivePlayer() != player) { - activate(player); + activate(player, stargate); } if (destinations.size() > 0) { diff --git a/src/net/TheDgtl/Stargate/Stargate.java b/src/net/TheDgtl/Stargate/Stargate.java index 7eba45e..c7dcad2 100644 --- a/src/net/TheDgtl/Stargate/Stargate.java +++ b/src/net/TheDgtl/Stargate/Stargate.java @@ -7,7 +7,6 @@ import java.util.logging.Logger; import org.bukkit.ChatColor; import org.bukkit.Material; -import org.bukkit.Server; import org.bukkit.block.Block; import org.bukkit.block.BlockDamageLevel; import org.bukkit.entity.Entity; @@ -31,7 +30,6 @@ import org.bukkit.event.world.WorldEvent; import org.bukkit.event.world.WorldListener; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; -import org.bukkit.plugin.PluginLoader; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.util.config.Configuration; @@ -46,9 +44,10 @@ import com.nijikokun.bukkit.Permissions.Permissions; */ public class Stargate extends JavaPlugin { // Permissions - public static Permissions Permissions = null; + private Permissions permissions = null; + private double permVersion = 0; - private final bListener blockListener = new bListener(); + private final bListener blockListener = new bListener(this); private final pListener playerListener = new pListener(); private final vListener vehicleListener = new vListener(); private final wListener worldListener = new wListener(); @@ -92,7 +91,12 @@ public class Stargate extends JavaPlugin { this.reloadConfig(); this.migrate(); this.reloadGates(); - this.setupPermissions(); + if (!this.setupPermissions()) { + log.info("[Stargate] Permissions not loaded, using defaults"); + } else { + if (permissions != null) + log.info("[Stargate] Using Permissions " + permVersion + " (" + Permissions.version + ") for permissions"); + } pm.registerEvent(Event.Type.PLAYER_MOVE, playerListener, Priority.Normal, this); @@ -207,15 +211,43 @@ public class Stargate extends JavaPlugin { } } - public void setupPermissions() { - Plugin perm = pm.getPlugin("Permissions"); + /* + * Find what Permissions plugin we're using and enable it. + */ + private boolean setupPermissions() { + Plugin perm; + // Apparently GM isn't a new permissions plugin, it's Permissions "2.0.1" + // API change broke my plugin. + perm = pm.getPlugin("Permissions"); + // We're running Permissions + if (perm != null) { + if (!perm.isEnabled()) { + pm.enablePlugin(perm); + } + permissions = (Permissions)perm; + try { + String[] permParts = Permissions.version.split("\\."); + permVersion = Double.parseDouble(permParts[0] + "." + permParts[1]); + } catch (Exception e) { + log.info("Could not determine Permissions version: " + Permissions.version); + return true; + } + return true; + } + // Permissions not loaded + return false; + } - if(perm != null) { - Stargate.Permissions = ((Permissions)perm); - } else { - log.info("[" + this.getDescription().getName() + "] Permission system not enabled."); - } - } + /* + * Check whether the player has the given permissions. + */ + public boolean hasPerm(Player player, String perm, boolean def) { + if (permissions != null) { + return permissions.getHandler().has(player, perm); + } else { + return def; + } + } private class vListener extends VehicleListener { @Override @@ -273,6 +305,12 @@ public class Stargate extends JavaPlugin { } private class bListener extends BlockListener { + Stargate stargate; + + bListener(Stargate stargate) { + this.stargate = stargate; + } + @Override public void onBlockPlace(BlockPlaceEvent event) { // Stop player from placing a block touching a portals controls @@ -288,7 +326,7 @@ public class Stargate extends JavaPlugin { Player player = event.getPlayer(); Block block = event.getBlock(); // Initialize a stargate - if (Stargate.hasPerm(player, "stargate.create", player.isOp())) { + if (hasPerm(player, "stargate.create", player.isOp())) { SignPost sign = new SignPost(new Blox(block)); // Set sign text so we can create a gate with it. sign.setText(0, event.getLine(0)); @@ -319,9 +357,9 @@ public class Stargate extends JavaPlugin { Portal portal = Portal.getByBlock(block); // Cycle through a stargates locations if (portal != null) { - if (Stargate.hasPerm(player, "stargate.use", true)) { + if (hasPerm(player, "stargate.use", true)) { if ((!portal.isOpen()) && (!portal.isFixed())) { - portal.cycleDestination(player); + portal.cycleDestination(player, stargate); } } else { if (!denyMsg.isEmpty()) { @@ -333,7 +371,7 @@ public class Stargate extends JavaPlugin { // Implement right-click to toggle a stargate, gets around spawn protection problem. if ((block.getType() == Material.STONE_BUTTON)) { - if (Stargate.hasPerm(player, "stargate.use", true)) { + if (hasPerm(player, "stargate.use", true)) { Portal portal = Portal.getByBlock(block); if (portal != null) { onButtonPressed(player, portal); @@ -347,8 +385,8 @@ public class Stargate extends JavaPlugin { Player player = event.getPlayer(); Block block = event.getBlock(); // Check if we're pushing a button. - if (block.getType() == Material.STONE_BUTTON && event.getDamageLevel() == BlockDamageLevel.STOPPED) { - if (Stargate.hasPerm(player, "stargate.use", true)) { + if (block.getType() == Material.STONE_BUTTON && event.getDamageLevel() == BlockDamageLevel.STARTED) { + if (hasPerm(player, "stargate.use", true)) { Portal portal = Portal.getByBlock(block); if (portal != null) { onButtonPressed(player, portal); @@ -368,7 +406,7 @@ public class Stargate extends JavaPlugin { Portal portal = Portal.getByBlock(block); if (portal == null) return; - if (!Stargate.hasPerm(player, "stargate.destroy", player.isOp())) { + if (!hasPerm(player, "stargate.destroy", player.isOp())) { event.setCancelled(true); return; } @@ -404,13 +442,6 @@ public class Stargate extends JavaPlugin { } } - @SuppressWarnings("static-access") - public static Boolean hasPerm(Player player, String perm, Boolean def) { - if (Permissions != null) - return Permissions.Security.permission(player, perm); - return def; - } - private class SGThread implements Runnable { public void run() { long time = System.currentTimeMillis() / 1000; diff --git a/src/plugin.yml b/src/plugin.yml index 4ece164..3e67c13 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: Stargate main: net.TheDgtl.Stargate.Stargate -version: 0.15 +version: 0.18 description: Stargate mod for Bukkit author: Drakia website: http://www.thedgtl.net \ No newline at end of file