From e6acdb48cedd659410af5304a7675bca65b1529a Mon Sep 17 00:00:00 2001 From: Andre LeBlanc Date: Tue, 12 Feb 2013 22:41:10 -0500 Subject: [PATCH] support 3rd party plugins registering as group providers --- .../acru/bukkit/Lockette/GroupProvider.java | 7 +++++ src/org/yi/acru/bukkit/Lockette/Lockette.java | 26 +++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 src/org/yi/acru/bukkit/Lockette/GroupProvider.java diff --git a/src/org/yi/acru/bukkit/Lockette/GroupProvider.java b/src/org/yi/acru/bukkit/Lockette/GroupProvider.java new file mode 100644 index 0000000..bf4463b --- /dev/null +++ b/src/org/yi/acru/bukkit/Lockette/GroupProvider.java @@ -0,0 +1,7 @@ +package org.yi.acru.bukkit.Lockette; + +import org.bukkit.World; + +public interface GroupProvider { + public boolean playerInGroup(World world, String player, String group); +} diff --git a/src/org/yi/acru/bukkit/Lockette/Lockette.java b/src/org/yi/acru/bukkit/Lockette/Lockette.java index a6cca28..c6346ec 100644 --- a/src/org/yi/acru/bukkit/Lockette/Lockette.java +++ b/src/org/yi/acru/bukkit/Lockette/Lockette.java @@ -12,12 +12,14 @@ import java.io.File; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import org.bukkit.ChatColor; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.Sign; @@ -58,7 +60,7 @@ public class Lockette extends PluginCore{ protected static FileConfiguration strings = null; protected final HashMap playerList = new HashMap(); - + protected final HashSet registeredGroupProviders = new HashSet(); final static int materialTrapDoor = 96; final static int materialFenceGate = 107; @@ -155,7 +157,27 @@ public void onDisable(){ enabled = false; } - + + public boolean registerGroupProvider(GroupProvider provider) { + return registeredGroupProviders.add(provider); + } + + public boolean unregisterGroupProvider(GroupProvider provider) { + return registeredGroupProviders.remove(provider); + } + + @Override + public boolean inGroup(World world, String player, String group) { + if (super.inGroup(world, player, group)) return true; + if (group.startsWith("[") && group.endsWith("]")) { + group = group.substring(1,group.length()-1); + for (GroupProvider p: registeredGroupProviders) { + if (p.playerInGroup(world, player, group)) return true; + } + } + return false; + } + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){ if(!cmd.getName().equalsIgnoreCase("lockette")) return(false); if(sender instanceof Player) return(true); // Handling in command preprocess for now.