Small permissions handling update.

Core GM support removed, depends on FakePermissions if you use GM.
Fixed Permissions, will work with GroupManager, Permissions 2.0, or Permissions 2.1
Left-clicking to activate a stargate works again
This commit is contained in:
Drakia 2011-03-04 21:03:56 -08:00
parent 3c914dec9b
commit a7f6d37c53
4 changed files with 70 additions and 32 deletions

7
README
View File

@ -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.

View File

@ -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) {

View File

@ -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;

View File

@ -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