diff --git a/src/com/massivecraft/mcore1/MCore.java b/src/com/massivecraft/mcore1/MCore.java index 237001a4..5ad19449 100644 --- a/src/com/massivecraft/mcore1/MCore.java +++ b/src/com/massivecraft/mcore1/MCore.java @@ -24,6 +24,7 @@ import com.massivecraft.mcore1.persist.One; import com.massivecraft.mcore1.persist.Persist; import com.massivecraft.mcore1.text.Txt; import com.massivecraft.mcore1.util.Perm; +import com.massivecraft.mcore1.util.PlayerUtil; public class MCore extends JavaPlugin { @@ -138,6 +139,8 @@ public class MCore extends JavaPlugin { logPrefix = "["+this.getDescription().getName()+"] "; + PlayerUtil.populateAllVisitorNames(); + // This is safe since all plugins using Persist should bukkit-depend this plugin. getPersistInstances().clear(); diff --git a/src/com/massivecraft/mcore1/MCorePlayerListener.java b/src/com/massivecraft/mcore1/MCorePlayerListener.java index 66532957..897dbaa8 100644 --- a/src/com/massivecraft/mcore1/MCorePlayerListener.java +++ b/src/com/massivecraft/mcore1/MCorePlayerListener.java @@ -7,6 +7,7 @@ import org.bukkit.event.player.PlayerPreLoginEvent; import com.massivecraft.mcore1.persist.IClassManager; import com.massivecraft.mcore1.persist.Persist; +import com.massivecraft.mcore1.util.PlayerUtil; public class MCorePlayerListener extends PlayerListener { @@ -22,6 +23,8 @@ public class MCorePlayerListener extends PlayerListener { String id = event.getName(); + PlayerUtil.getAllVisitorNames().add(id); + for (Persist realm : MCore.getPersistInstances().values()) { for (IClassManager manager : realm.getClassManagers().values()) diff --git a/src/com/massivecraft/mcore1/cmd/arg/AHPlayerWrapper.java b/src/com/massivecraft/mcore1/cmd/arg/AHPlayerWrapper.java index 2e61c1da..6cc6ef97 100644 --- a/src/com/massivecraft/mcore1/cmd/arg/AHPlayerWrapper.java +++ b/src/com/massivecraft/mcore1/cmd/arg/AHPlayerWrapper.java @@ -4,6 +4,8 @@ import org.bukkit.command.CommandSender; import com.massivecraft.mcore1.MPlugin; import com.massivecraft.mcore1.persist.IClassManager; +import com.massivecraft.mcore1.persist.Persist; +import com.massivecraft.mcore1.util.PlayerUtil; public abstract class AHPlayerWrapper extends AHBase { @@ -23,7 +25,7 @@ public abstract class AHPlayerWrapper extends AHBase IClassManager manager = this.getManager(p); T ret; - if (style != null && style.equals("match")) + if (style != null && style.equalsIgnoreCase("match")) { ret = manager.getBestMatch(str); if (ret != null) @@ -32,6 +34,15 @@ public abstract class AHPlayerWrapper extends AHBase } this.error = "No player name begins with \"

"+str+"\"."; } + else if (style != null && style.equalsIgnoreCase("matchany")) + { + ret = manager.get(Persist.getBestCIStart(PlayerUtil.getAllVisitorNames(), str)); + if (ret != null) + { + return ret; + } + this.error = "No player name begins with \"

"+str+"\"."; + } else { ret = manager.get(str); diff --git a/src/com/massivecraft/mcore1/util/PlayerUtil.java b/src/com/massivecraft/mcore1/util/PlayerUtil.java new file mode 100644 index 00000000..51ea2ad9 --- /dev/null +++ b/src/com/massivecraft/mcore1/util/PlayerUtil.java @@ -0,0 +1,29 @@ +package com.massivecraft.mcore1.util; + +import java.io.File; +import java.util.Set; +import java.util.TreeSet; + +import org.bukkit.Bukkit; + +public class PlayerUtil +{ + private static Set allVisitorNames = new TreeSet(String.CASE_INSENSITIVE_ORDER); + public static Set getAllVisitorNames() { return allVisitorNames; } + public static void populateAllVisitorNames() + { + // What is the name of the default world? + String worldname = Bukkit.getWorlds().get(0).getName(); + + // Find the player folder + File playerfolder = new File(worldname, "players"); + + // Populate by removing .dat + for (File playerfile : playerfolder.listFiles()) + { + String filename = playerfile.getName(); + String playername = filename.substring(0, filename.length()-4); + allVisitorNames.add(playername); + } + } +}