diff --git a/PlotSquared/pom.xml b/PlotSquared/pom.xml
index 0151f0af6..ec123e849 100644
--- a/PlotSquared/pom.xml
+++ b/PlotSquared/pom.xml
@@ -6,7 +6,7 @@
com.intellectualcrafters
PlotSquared
- 2.4.0
+ 2.3.8
PlotSquared
jar
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotMain.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotMain.java
index f74ac9c71..2757bf3ae 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotMain.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/PlotMain.java
@@ -38,9 +38,7 @@ import com.intellectualcrafters.plot.listeners.*;
import com.intellectualcrafters.plot.object.*;
import com.intellectualcrafters.plot.util.*;
import com.intellectualcrafters.plot.util.Logger.LogLevel;
-import com.intellectualcrafters.plot.uuid.OfflineUUIDWrapper;
import com.intellectualcrafters.plot.uuid.PlotUUIDSaver;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
import com.intellectualcrafters.plot.uuid.UUIDSaver;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/api/PlotAPI.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/api/PlotAPI.java
index 60a49c4f6..b0063db7b 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/api/PlotAPI.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/api/PlotAPI.java
@@ -35,7 +35,7 @@ import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.PlotSquaredException;
import com.intellectualcrafters.plot.util.SchematicHandler;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
+import com.intellectualcrafters.plot.util.UUIDHandler;
import com.sun.istack.internal.NotNull;
import org.bukkit.Bukkit;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Clear.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Clear.java
index 97e224687..1cc25527a 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Clear.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Clear.java
@@ -27,7 +27,7 @@ import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Database.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Database.java
index 722f8715c..55595967c 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Database.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Database.java
@@ -6,7 +6,7 @@ import com.intellectualcrafters.plot.database.SQLManager;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.StringComparison;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugClaimTest.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugClaimTest.java
index feee860a6..465b6aa6f 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugClaimTest.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/DebugClaimTest.java
@@ -30,8 +30,7 @@ import com.intellectualcrafters.plot.flag.FlagManager;
import com.intellectualcrafters.plot.object.*;
import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
-
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Denied.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Denied.java
index 2b4882f60..5acbebf19 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Denied.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Denied.java
@@ -27,7 +27,7 @@ import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.events.PlayerPlotDeniedEvent;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Helpers.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Helpers.java
index d40347d65..fa9a02f0c 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Helpers.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Helpers.java
@@ -27,7 +27,7 @@ import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.events.PlayerPlotHelperEvent;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Info.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Info.java
index cef39085b..1d1673f40 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Info.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Info.java
@@ -30,8 +30,7 @@ import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
-
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.Location;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Schematic.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Schematic.java
index 5b2c17562..de5795a73 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Schematic.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Schematic.java
@@ -30,8 +30,6 @@ import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.*;
import com.intellectualcrafters.plot.util.SchematicHandler.DataCollection;
import com.intellectualcrafters.plot.util.SchematicHandler.Dimension;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
-
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/SetOwner.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/SetOwner.java
index fe924c549..a4169ab5e 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/SetOwner.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/SetOwner.java
@@ -28,7 +28,7 @@ import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.World;
import org.bukkit.entity.Player;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trusted.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trusted.java
index b9ec0b46b..5f171c901 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trusted.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Trusted.java
@@ -27,7 +27,7 @@ import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.events.PlayerPlotTrustedEvent;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unlink.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unlink.java
index 24d840813..c7a48e808 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unlink.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Unlink.java
@@ -32,7 +32,7 @@ import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.SetBlockFast;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.World;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Visit.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Visit.java
index 0b655eec9..462c4de26 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Visit.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/Visit.java
@@ -24,8 +24,7 @@ package com.intellectualcrafters.plot.commands;
import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.object.Plot;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
-
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.entity.Player;
import java.util.ArrayList;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/list.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/list.java
index e0c0a1ac1..33fb952ea 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/list.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/commands/list.java
@@ -27,8 +27,7 @@ import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.StringComparison;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
-
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java
index 125cdb0ee..a08d43b79 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/database/SQLManager.java
@@ -30,7 +30,7 @@ import com.intellectualcrafters.plot.object.PlotHomePosition;
import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.Logger;
import com.intellectualcrafters.plot.util.Logger.LogLevel;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotListener.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotListener.java
index 25cf89c7a..2553e3740 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotListener.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotListener.java
@@ -29,8 +29,7 @@ import com.intellectualcrafters.plot.events.PlayerLeavePlotEvent;
import com.intellectualcrafters.plot.flag.FlagManager;
import com.intellectualcrafters.plot.object.*;
import com.intellectualcrafters.plot.util.PlayerFunctions;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
-
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.*;
import org.bukkit.block.Biome;
import org.bukkit.block.Block;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotPlusListener.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotPlusListener.java
index 674d8540e..970c19e35 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotPlusListener.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/PlotPlusListener.java
@@ -26,7 +26,7 @@ import com.intellectualcrafters.plot.events.PlayerEnterPlotEvent;
import com.intellectualcrafters.plot.events.PlayerLeavePlotEvent;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.util.PlayerFunctions;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.*;
import org.bukkit.entity.EntityType;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldEditListener.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldEditListener.java
index 0291e6992..7d4fe3945 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldEditListener.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldEditListener.java
@@ -31,7 +31,7 @@ import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.PWE;
import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
+import com.intellectualcrafters.plot.util.UUIDHandler;
import com.sk89q.worldedit.BlockVector;
import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.bukkit.selections.Selection;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldGuardListener.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldGuardListener.java
index e153a44ad..0c8d61e7e 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldGuardListener.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/listeners/WorldGuardListener.java
@@ -29,7 +29,7 @@ import com.intellectualcrafters.plot.events.PlotUnlinkEvent;
import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.util.PlotHelper;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
+import com.intellectualcrafters.plot.util.UUIDHandler;
import com.sk89q.worldedit.BlockVector;
import com.sk89q.worldguard.domains.DefaultDomain;
import com.sk89q.worldguard.protection.flags.DefaultFlag;
@@ -37,7 +37,6 @@ import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
-
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/InfoInventory.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/InfoInventory.java
index df8d953b7..2874493ca 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/InfoInventory.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/InfoInventory.java
@@ -1,7 +1,6 @@
package com.intellectualcrafters.plot.object;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
-
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/Plot.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/Plot.java
index 50582579f..3afc1fd54 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/Plot.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/object/Plot.java
@@ -25,7 +25,7 @@ import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.flag.Flag;
import com.intellectualcrafters.plot.util.PlotHelper;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.World;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlayerFunctions.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlayerFunctions.java
index f3a68c22f..f989abf0f 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlayerFunctions.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlayerFunctions.java
@@ -28,8 +28,6 @@ import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotId;
import com.intellectualcrafters.plot.object.PlotManager;
import com.intellectualcrafters.plot.object.PlotWorld;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
-
import org.bukkit.*;
import org.bukkit.entity.Player;
import org.bukkit.util.ChatPaginator;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotHelper.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotHelper.java
index fe51fc51a..a7b66e220 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotHelper.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/util/PlotHelper.java
@@ -26,7 +26,6 @@ import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.database.DBFunc;
import com.intellectualcrafters.plot.listeners.PlotListener;
import com.intellectualcrafters.plot.object.*;
-import com.intellectualcrafters.plot.uuid.UUIDHandler;
import net.milkbowl.vault.economy.Economy;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/DefaultUUIDWrapper.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/DefaultUUIDWrapper.java
deleted file mode 100644
index f5be0b554..000000000
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/DefaultUUIDWrapper.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.intellectualcrafters.plot.uuid;
-
-import java.util.UUID;
-
-import org.bukkit.Bukkit;
-import org.bukkit.OfflinePlayer;
-import org.bukkit.entity.Player;
-
-public class DefaultUUIDWrapper extends UUIDWrapper {
-
- @Override
- public UUID getUUID(Player player) {
- return player.getUniqueId();
- }
-
- @Override
- public UUID getUUID(OfflinePlayer player) {
- return player.getUniqueId();
- }
-
- @Override
- public OfflinePlayer getOfflinePlayer(UUID uuid) {
- return Bukkit.getOfflinePlayer(uuid);
- }
-
- @Override
- public Player getPlayer(UUID uuid) {
- return Bukkit.getPlayer(uuid);
- }
-
-}
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/OfflineUUIDWrapper.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/OfflineUUIDWrapper.java
deleted file mode 100644
index 475e62e62..000000000
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/OfflineUUIDWrapper.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.intellectualcrafters.plot.uuid;
-
-import java.util.UUID;
-
-import org.bukkit.Bukkit;
-import org.bukkit.OfflinePlayer;
-import org.bukkit.entity.Player;
-
-import com.google.common.base.Charsets;
-import com.google.common.collect.BiMap;
-import com.intellectualcrafters.plot.object.StringWrapper;
-
-public class OfflineUUIDWrapper extends UUIDWrapper {
-
- @Override
- public UUID getUUID(Player player) {
- return UUID.nameUUIDFromBytes(("OfflinePlayer:" + player.getName()).getBytes(Charsets.UTF_8));
- }
-
- @Override
- public UUID getUUID(OfflinePlayer player) {
- return UUID.nameUUIDFromBytes(("OfflinePlayer:" + player.getName()).getBytes(Charsets.UTF_8));
- }
-
- @Override
- public OfflinePlayer getOfflinePlayer(UUID uuid) {
- BiMap map = UUIDHandler.getUuidMap().inverse();
- String name = map.get(uuid).value;
- if (name != null) {
- return Bukkit.getOfflinePlayer(name);
- }
- else {
- for (OfflinePlayer player : Bukkit.getOfflinePlayers()) {
- if (getUUID(player).equals(uuid)) {
- return player;
- }
- }
- }
- return Bukkit.getOfflinePlayer(uuid.toString());
- }
-
- @Override
- public Player getPlayer(UUID uuid) {
- for (Player player : Bukkit.getOnlinePlayers()) {
- if (getUUID(player).equals(uuid)) {
- return player;
- }
- }
- return null;
- }
-
-
-
-}
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/PlotUUIDSaver.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/PlotUUIDSaver.java
index 4ecc63a24..5b9bcc034 100644
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/PlotUUIDSaver.java
+++ b/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/PlotUUIDSaver.java
@@ -27,7 +27,7 @@ import com.intellectualcrafters.json.JSONTokener;
import com.intellectualcrafters.plot.PlotMain;
import com.intellectualcrafters.plot.config.Settings;
import com.intellectualcrafters.plot.object.StringWrapper;
-
+import com.intellectualcrafters.plot.util.UUIDHandler;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.plugin.java.JavaPlugin;
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/UUIDHandler.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/UUIDHandler.java
deleted file mode 100644
index a3c82e5d0..000000000
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/UUIDHandler.java
+++ /dev/null
@@ -1,343 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////////////////////////
-// PlotSquared - A plot manager and world generator for the Bukkit API /
-// Copyright (c) 2014 IntellectualSites/IntellectualCrafters /
-// /
-// This program is free software; you can redistribute it and/or modify /
-// it under the terms of the GNU General Public License as published by /
-// the Free Software Foundation; either version 3 of the License, or /
-// (at your option) any later version. /
-// /
-// This program is distributed in the hope that it will be useful, /
-// but WITHOUT ANY WARRANTY; without even the implied warranty of /
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the /
-// GNU General Public License for more details. /
-// /
-// You should have received a copy of the GNU General Public License /
-// along with this program; if not, write to the Free Software Foundation, /
-// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA /
-// /
-// You can contact us via: support@intellectualsites.com /
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-package com.intellectualcrafters.plot.uuid;
-
-import com.google.common.base.Charsets;
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
-import com.intellectualcrafters.plot.PlotMain;
-import com.intellectualcrafters.plot.config.Settings;
-import com.intellectualcrafters.plot.object.StringWrapper;
-
-import org.bukkit.Bukkit;
-import org.bukkit.OfflinePlayer;
-import org.bukkit.entity.Player;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.UUID;
-
-/**
- * This class can be used to efficiently translate UUIDs and names back and
- * forth.
- * It uses three primary methods of achieving this:
- * - Read From Cache
- * - Read from OfflinePlayer objects
- * - Read from (if onlinemode: mojang api) (else: playername hashing)
- * All UUIDs/Usernames will be stored in a map (cache) until the server is
- * restarted.
- *
- * You can use getUuidMap() to save the uuids/names to a file (SQLite db for
- * example).
- * Primary methods: getUUID(String name) & getName(UUID uuid) <-- You should
- * ONLY use these.
- * Call startFetch(JavaPlugin plugin) in your onEnable().
- *
- * Originally created by:
- *
- * @author Citymonstret
- * @author Empire92
- * for PlotSquared.
- */
-@SuppressWarnings("unused")
-public class UUIDHandler {
-
- public static UUIDWrapper uuidWrapper = null;
-
- /**
- * Online mode
- *
- * @see org.bukkit.Server#getOnlineMode()
- */
- private final static boolean online = Bukkit.getServer().getOnlineMode() && !Settings.OFFLINE_MODE;
-
- /**
- * Map containing names and UUIDs
- *
- * @see com.google.common.collect.BiMap
- */
- private final static BiMap uuidMap = HashBiMap.create(new HashMap());
-
- /**
- * Get the map containing all names/uuids
- *
- * @return map with names + uuids
- * @see com.google.common.collect.BiMap
- */
- public static BiMap getUuidMap() {
- return uuidMap;
- }
-
- /**
- * Check if a uuid is cached
- *
- * @param uuid to check
- * @return true of the uuid is cached
- * @see com.google.common.collect.BiMap#containsValue(Object)
- */
- public static boolean uuidExists(final UUID uuid) {
- return uuidMap.containsValue(uuid);
- }
-
- /**
- * Check if a name is cached
- *
- * @param name to check
- * @return true of the name is cached
- * @see com.google.common.collect.BiMap#containsKey(Object)
- */
- public static boolean nameExists(final StringWrapper name) {
- return uuidMap.containsKey(name);
- }
-
- /**
- * Add a set to the cache
- *
- * @param name to cache
- * @param uuid to cache
- */
- public static void add(final StringWrapper name, final UUID uuid) {
- if (!uuidMap.containsKey(name) && !uuidMap.inverse().containsKey(uuid)) {
- uuidMap.put(name, uuid);
- }
- }
-
- /**
- * @param name to use as key
- * @return uuid
- */
- public static UUID getUUID(final String name) {
- final StringWrapper nameWrap = new StringWrapper(name);
- if (uuidMap.containsKey(nameWrap)) {
- return uuidMap.get(nameWrap);
- }
- @SuppressWarnings("deprecation")
- final Player player = Bukkit.getPlayer(name);
- if (player != null) {
- final UUID uuid = getUUID(player);
- add(nameWrap, uuid);
- return uuid;
- }
- UUID uuid;
- if (online) {
- if (Settings.CUSTOM_API) {
- if ((uuid = getUuidOnlinePlayer(nameWrap)) != null) {
- return uuid;
- }
- try {
- return PlotMain.getUUIDSaver().mojangUUID(name);
- } catch (final Exception e) {
- try {
- final UUIDFetcher fetcher = new UUIDFetcher(Arrays.asList(name));
- uuid = fetcher.call().get(name);
- add(nameWrap, uuid);
- } catch (final Exception ex) {
- ex.printStackTrace();
- }
- }
- } else {
- try {
- final UUIDFetcher fetcher = new UUIDFetcher(Arrays.asList(name));
- uuid = fetcher.call().get(name);
- add(nameWrap, uuid);
- } catch (final Exception ex) {
- ex.printStackTrace();
- }
- }
- } else {
- return getUuidOfflineMode(nameWrap);
- }
- return null;
- }
-
- /**
- * @param uuid to use as key
- * @return name (cache)
- */
- private static StringWrapper loopSearch(final UUID uuid) {
- return uuidMap.inverse().get(uuid);
- }
-
- /**
- * @param uuid to use as key
- * @return Name
- */
- public static String getName(final UUID uuid) {
- if (uuidExists(uuid)) {
- return loopSearch(uuid).value;
- }
- String name;
- if ((name = getNameOnlinePlayer(uuid)) != null) {
- return name;
- }
- if ((name = getNameOfflinePlayer(uuid)) != null) {
- return name;
- }
- if (online && !Settings.OFFLINE_MODE) {
- if (!Settings.CUSTOM_API) {
- try {
- final NameFetcher fetcher = new NameFetcher(Arrays.asList(uuid));
- name = fetcher.call().get(uuid);
- add(new StringWrapper(name), uuid);
- return name;
- } catch (final Exception ex) {
- ex.printStackTrace();
- }
- } else {
- try {
- return PlotMain.getUUIDSaver().mojangName(uuid);
- } catch (final Exception e) {
- try {
- final NameFetcher fetcher = new NameFetcher(Arrays.asList(uuid));
- name = fetcher.call().get(uuid);
- add(new StringWrapper(name), uuid);
- return name;
- } catch (final Exception ex) {
- e.printStackTrace();
- }
- }
- }
- try {
- return PlotMain.getUUIDSaver().mojangName(uuid);
- } catch (final Exception e) {
- try {
- final NameFetcher fetcher = new NameFetcher(Arrays.asList(uuid));
- name = fetcher.call().get(uuid);
- add(new StringWrapper(name), uuid);
- return name;
- } catch (final Exception ex) {
- ex.printStackTrace();
- }
- }
- } else {
- return "unknown";
- }
- return "";
- }
-
- /**
- * @param name to use as key
- * @return UUID (name hash)
- */
- private static UUID getUuidOfflineMode(final StringWrapper name) {
- final UUID uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8));
- add(name, uuid);
- return uuid;
- }
-
- /**
- * @param uuid to use as key
- * @return String - name
- */
- private static String getNameOnlinePlayer(final UUID uuid) {
- final Player player = uuidWrapper.getPlayer(uuid);
- if ((player == null) || !player.isOnline()) {
- return null;
- }
- final String name = player.getName();
- add(new StringWrapper(name), uuid);
- return name;
- }
-
-
-
- /**
- * @param uuid to use as key
- * @return String - name
- */
- private static String getNameOfflinePlayer(final UUID uuid) {
- final OfflinePlayer player = uuidWrapper.getOfflinePlayer(uuid);
- if ((player == null) || !player.hasPlayedBefore()) {
- return null;
- }
- final String name = player.getName();
- add(new StringWrapper(name), uuid);
- return name;
- }
-
- /**
- * @param name to use as key
- * @return UUID
- */
- private static UUID getUuidOnlinePlayer(final StringWrapper name) {
- @SuppressWarnings("deprecation")
- final Player player = Bukkit.getPlayer(name.value);
- if (player == null) {
- return null;
- }
- final UUID uuid = getUUID(player);
- add(name, uuid);
- return uuid;
- }
-
- /**
- * Handle saving of uuids
- *
- * @see com.intellectualcrafters.plot.uuid.UUIDSaver#globalSave(com.google.common.collect.BiMap)
- */
- @SuppressWarnings("unused")
- public static void handleSaving() {
- final UUIDSaver saver = PlotMain.getUUIDSaver();
- saver.globalSave(getUuidMap());
- }
-
- public static UUID getUUID(Player player) {
- if (uuidWrapper == null) {
- try {
- getUUID(player);
- uuidWrapper = new DefaultUUIDWrapper();
- }
- catch (Throwable e) {
- uuidWrapper = new OfflineUUIDWrapper();
- }
- }
- return uuidWrapper.getUUID(player);
- }
-
- /**
- * Safely provide the correct UUID provider. Ignores user preference if not possible rather than break the plugin.
- */
- public static UUID getUUID(OfflinePlayer player) {
- if (uuidWrapper == null) {
-
- if (Settings.OFFLINE_MODE) {
- uuidWrapper = new OfflineUUIDWrapper();
- }
- else {
- try {
- getUUID(player);
- uuidWrapper = new DefaultUUIDWrapper();
- }
- catch (Throwable e) {
- uuidWrapper = new OfflineUUIDWrapper();
- }
- }
- }
- try {
- return uuidWrapper.getUUID(player);
- }
- catch (Throwable e) {
- uuidWrapper = new OfflineUUIDWrapper();
- return uuidWrapper.getUUID(player);
- }
- }
-}
diff --git a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/UUIDWrapper.java b/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/UUIDWrapper.java
deleted file mode 100644
index 454e9343f..000000000
--- a/PlotSquared/src/main/java/com/intellectualcrafters/plot/uuid/UUIDWrapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.intellectualcrafters.plot.uuid;
-
-import java.util.UUID;
-
-import org.bukkit.OfflinePlayer;
-import org.bukkit.entity.Player;
-
-public abstract class UUIDWrapper {
- public abstract UUID getUUID(Player player);
-
- public abstract UUID getUUID(OfflinePlayer player);
-
- public abstract OfflinePlayer getOfflinePlayer(UUID uuid);
-
- public abstract Player getPlayer(UUID uuid);
-}