diff --git a/pom.xml b/pom.xml
index be27cf8..87258b4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,7 +30,7 @@
org.bukkit
bukkit
- 1.7.2-R0.4-SNAPSHOT
+ 1.7.9-R0.1
org.dynmap
diff --git a/src/main/java/com/wimbli/WorldBorder/BorderCheckTask.java b/src/main/java/com/wimbli/WorldBorder/BorderCheckTask.java
index 975ad71..cadd446 100644
--- a/src/main/java/com/wimbli/WorldBorder/BorderCheckTask.java
+++ b/src/main/java/com/wimbli/WorldBorder/BorderCheckTask.java
@@ -53,7 +53,7 @@ public class BorderCheckTask implements Runnable
return null;
// if player is in bypass list (from bypass command), allow them beyond border; also ignore players currently being handled already
- if (Config.isPlayerBypassing(player.getName()) || handlingPlayers.contains(player.getName().toLowerCase()))
+ if (Config.isPlayerBypassing(player.getUniqueId()) || handlingPlayers.contains(player.getName().toLowerCase()))
return null;
// tag this player as being handled so we can't get stuck in a loop due to Bukkit currently sometimes repeatedly providing incorrect location through teleport event
diff --git a/src/main/java/com/wimbli/WorldBorder/Config.java b/src/main/java/com/wimbli/WorldBorder/Config.java
index c1b876a..f340aa0 100644
--- a/src/main/java/com/wimbli/WorldBorder/Config.java
+++ b/src/main/java/com/wimbli/WorldBorder/Config.java
@@ -6,11 +6,13 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
+import java.util.UUID;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
@@ -36,7 +38,7 @@ public class Config
// actual configuration values which can be changed
private static boolean shapeRound = true;
private static Map borders = Collections.synchronizedMap(new LinkedHashMap());
- private static Set bypassPlayers = Collections.synchronizedSet(new LinkedHashSet());
+ private static Set bypassPlayers = Collections.synchronizedSet(new LinkedHashSet());
private static String message; // raw message without color code formatting
private static String messageFmt; // message with color code formatting ("&" changed to funky sort-of-double-dollar-sign for legitimate color/formatting codes)
private static String messageClean; // message cleaned of formatting codes
@@ -373,32 +375,42 @@ public class Config
return dynmapMessage;
}
- public static void setPlayerBypass(String player, boolean bypass)
+ public static void setPlayerBypass(UUID player, boolean bypass)
{
if (bypass)
- bypassPlayers.add(player.toLowerCase());
+ bypassPlayers.add(player);
else
- bypassPlayers.remove(player.toLowerCase());
+ bypassPlayers.remove(player);
+ save(true);
}
- public static boolean isPlayerBypassing(String player)
+ public static boolean isPlayerBypassing(UUID player)
{
- return bypassPlayers.contains(player.toLowerCase());
+ return bypassPlayers.contains(player);
}
- public static void togglePlayerBypass(String player)
+ public static ArrayList getPlayerBypassList()
{
- setPlayerBypass(player, !isPlayerBypassing(player));
+ return new ArrayList(bypassPlayers);
}
- public static String getPlayerBypassList()
+ // for converting bypass UUID list to/from String list, for storage in config
+ private static void importBypassStringList(List strings)
{
- if (bypassPlayers.isEmpty())
- return "";
- String newString = bypassPlayers.toString();
- return newString.substring(1, newString.length() - 1);
+ for (String string: strings)
+ {
+ bypassPlayers.add(UUID.fromString(string));
+ }
+ }
+ private static ArrayList exportBypassStringList()
+ {
+ ArrayList strings = new ArrayList();
+ for (UUID uuid: bypassPlayers)
+ {
+ strings.add(uuid.toString());
+ }
+ return strings;
}
-
public static boolean isBorderTimerRunning()
@@ -526,7 +538,7 @@ public class Config
}
- private static final int currentCfgVersion = 10;
+ private static final int currentCfgVersion = 11;
public static void load(WorldBorder master, boolean logIt)
{ // load config from file
@@ -552,7 +564,7 @@ public class Config
killPlayer = cfg.getBoolean("player-killed-bad-spawn", false);
denyEnderpearl = cfg.getBoolean("deny-enderpearl", true);
fillAutosaveFrequency = cfg.getInt("fill-autosave-frequency", 30);
- bypassPlayers = Collections.synchronizedSet(new LinkedHashSet(cfg.getStringList("bypass-list")));
+ importBypassStringList(cfg.getStringList("bypass-list-uuids"));
fillMemoryTolerance = cfg.getInt("fill-memory-tolerance", 500);
StartBorderTimer();
@@ -579,6 +591,10 @@ public class Config
if (cfgVersion < 10)
denyEnderpearl = true;
+ // the border bypass list used to be stored as list of names rather than UUIDs; wipe that old list so the data won't be automatically saved back to the config file again
+ if (cfgVersion < 11)
+ cfg.set("bypass-list", null);
+
ConfigurationSection worlds = cfg.getConfigurationSection("worlds");
if (worlds != null)
{
@@ -654,7 +670,7 @@ public class Config
cfg.set("player-killed-bad-spawn", killPlayer);
cfg.set("deny-enderpearl", denyEnderpearl);
cfg.set("fill-autosave-frequency", fillAutosaveFrequency);
- cfg.set("bypass-list", new ArrayList(bypassPlayers));
+ cfg.set("bypass-list-uuids", exportBypassStringList());
cfg.set("fill-memory-tolerance", fillMemoryTolerance);
cfg.set("worlds", null);
diff --git a/src/main/java/com/wimbli/WorldBorder/UUID/NameFetcher.java b/src/main/java/com/wimbli/WorldBorder/UUID/NameFetcher.java
new file mode 100644
index 0000000..e1372c7
--- /dev/null
+++ b/src/main/java/com/wimbli/WorldBorder/UUID/NameFetcher.java
@@ -0,0 +1,49 @@
+package com.wimbli.WorldBorder.UUID;
+
+import com.google.common.collect.ImmutableList;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.Callable;
+
+
+/*
+ * code by evilmidget38
+ * from http://forums.bukkit.org/threads/player-name-uuid-fetcher.250926/
+ */
+
+public class NameFetcher implements Callable