From cfd059d24c6b11cde3b4b88c0776ce5edfa031f2 Mon Sep 17 00:00:00 2001 From: Steven Scott Date: Sat, 31 Mar 2012 10:49:58 -0700 Subject: [PATCH] [Version 0.7.6.5] - Resolve issue with buttons on glass gates falling off - /sg reload can now be used ingame (stargate.admin.reload permission) --- README | 4 ++++ src/net/TheDgtl/Stargate/Portal.java | 18 ++++++++++++++++-- src/net/TheDgtl/Stargate/Stargate.java | 14 ++++++++++---- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/README b/README index 7dfef41..95b53c1 100644 --- a/README +++ b/README @@ -49,6 +49,7 @@ stargate.free -- Allow free use/creation/destruction of gates stargate.admin -- Allow all admin features (Hidden/Private only so far) stargate.admin.private -- Allow use of Private gates not owned by user stargate.admin.hidden -- Allow access to Hidden gates not ownerd by user + stargate.admin.reload -- Allow use of /sg reload ============= Default Permissions @@ -204,6 +205,9 @@ createConflict=Gate conflicts with existing gate ============= Changes ============= +[Version 0.7.6.5] + - Resolve issue with buttons on glass gates falling off + - /sg reload can now be used ingame (stargate.admin.reload permission) [Version 0.7.6.4] - Move blockBreak to HIGHEST priority, this resolves issues with region protection plugins [Version 0.7.6.3] diff --git a/src/net/TheDgtl/Stargate/Portal.java b/src/net/TheDgtl/Stargate/Portal.java index 2432ae3..6f8ab71 100644 --- a/src/net/TheDgtl/Stargate/Portal.java +++ b/src/net/TheDgtl/Stargate/Portal.java @@ -57,6 +57,7 @@ public class Portal { // Static variables used to store portal lists private static final HashMap lookupBlocks = new HashMap(); private static final HashMap lookupEntrances = new HashMap(); + private static final HashMap lookupControls = new HashMap(); private static final ArrayList allPortals = new ArrayList(); private static final HashMap> allPortalsNet = new HashMap>(); private static final HashMap> lookupNamesNet = new HashMap>(); @@ -717,10 +718,14 @@ public class Portal { lookupBlocks.remove(block); } // Include the sign and button - lookupBlocks.remove(new Blox(id.getBlock())); + lookupBlocks.remove(id); if (button != null) { lookupBlocks.remove(button); } + + lookupControls.remove(id); + if (button != null) + lookupControls.remove(button); for (Blox entrance : getEntrances()) { lookupEntrances.remove(entrance); @@ -768,10 +773,14 @@ public class Portal { lookupBlocks.put(block, this); } // Include the sign and button - lookupBlocks.put(new Blox(id.getBlock()), this); + lookupBlocks.put(id, this); if (button != null) { lookupBlocks.put(button, this); } + + lookupControls.put(id, this); + if (button != null) + lookupControls.put(button, this); for (Blox entrance : getEntrances()) { lookupEntrances.put(entrance, this); @@ -1058,6 +1067,10 @@ public class Portal { public static Portal getByEntrance(Block block) { return lookupEntrances.get(new Blox(block)); } + + public static Portal getByControl(Block block) { + return lookupControls.get(new Blox(block)); + } public static Portal getByBlock(Block block) { return lookupBlocks.get(new Blox(block)); @@ -1128,6 +1141,7 @@ public class Portal { lookupBlocks.clear(); lookupNamesNet.clear(); lookupEntrances.clear(); + lookupControls.clear(); allPortals.clear(); allPortalsNet.clear(); } diff --git a/src/net/TheDgtl/Stargate/Stargate.java b/src/net/TheDgtl/Stargate/Stargate.java index 88cb0c8..a9a3a61 100644 --- a/src/net/TheDgtl/Stargate/Stargate.java +++ b/src/net/TheDgtl/Stargate/Stargate.java @@ -259,11 +259,11 @@ public class Stargate extends JavaPlugin { } } - public static void sendMessage(Player player, String message) { + public static void sendMessage(CommandSender player, String message) { sendMessage(player, message, true); } - public static void sendMessage(Player player, String message, boolean error) { + public static void sendMessage(CommandSender player, String message, boolean error) { if (message.isEmpty()) return; message = message.replaceAll("(&([a-f0-9]))", "\u00A7$2"); if (error) @@ -976,6 +976,8 @@ public class Stargate extends JavaPlugin { Block block = event.getBlock(); Portal portal = Portal.getByEntrance(block); if (portal != null) event.setCancelled(true); + portal = Portal.getByControl(block); + if (portal != null) event.setCancelled(true); } @EventHandler @@ -1200,8 +1202,11 @@ public class Stargate extends JavaPlugin { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (sender instanceof Player) { - Stargate.sendMessage((Player)sender, "Permission Denied"); - return true; + Player p = (Player)sender; + if (!hasPerm(p, "stargate.admin") && !hasPerm(p, "stargate.admin.reload")) { + sendMessage(sender, "Permission Denied"); + return true; + } } String cmd = command.getName(); if (cmd.equalsIgnoreCase("sg")) { @@ -1241,6 +1246,7 @@ public class Stargate extends JavaPlugin { iConomyHandler.register = null; iConomyHandler.economy = null; } + sendMessage(sender, "Stargate reloaded"); return true; } return false;