diff --git a/src/main/java/xyz/atnrch/nicko/gui/items/admin/cache/CacheEntry.java b/src/main/java/xyz/atnrch/nicko/gui/items/admin/cache/CacheEntry.java index cbf8ee9..cf53a1d 100644 --- a/src/main/java/xyz/atnrch/nicko/gui/items/admin/cache/CacheEntry.java +++ b/src/main/java/xyz/atnrch/nicko/gui/items/admin/cache/CacheEntry.java @@ -5,9 +5,11 @@ import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; import org.jetbrains.annotations.NotNull; +import xyz.atnrch.nicko.NickoBukkit; import xyz.atnrch.nicko.gui.ConfirmGUI; import xyz.atnrch.nicko.gui.admin.cache.CacheDetailedGUI; import xyz.atnrch.nicko.gui.items.confirm.ActionCallback; +import xyz.atnrch.nicko.mojang.MojangAPI; import xyz.xenondevs.invui.item.builder.ItemBuilder; import xyz.xenondevs.invui.item.builder.SkullBuilder; import xyz.xenondevs.invui.item.impl.AsyncItem; @@ -16,17 +18,20 @@ import java.util.UUID; public class CacheEntry extends AsyncItem { private final String name; + private final String uuid; + private final MojangAPI mojangAPI = NickoBukkit.getInstance().getMojangAPI(); - public CacheEntry(String name) { + public CacheEntry(String uuid) { super(new ItemBuilder(Material.PAINTING).setDisplayName("§7§oLoading..."), () -> { - final String stringUUID = name.replaceAll("(.{8})(.{4})(.{4})(.{4})(.+)", "$1-$2-$3-$4-$5"); - final UUID uuid = UUID.fromString(stringUUID); - final SkullBuilder skull = new SkullBuilder(uuid); - skull.setDisplayName("§6Skin Entry"); + final String dashedUuid = uuid.replaceAll("(.{8})(.{4})(.{4})(.{4})(.+)", "$1-$2-$3-$4-$5"); + final UUID uuidObject = UUID.fromString(dashedUuid); + final SkullBuilder skull = new SkullBuilder(uuidObject); + skull.setDisplayName("§6" + NickoBukkit.getInstance().getMojangAPI().getUUIDName(uuid)); skull.addLoreLines("§7Click to invalidate skin"); return skull; }); - this.name = name; + this.uuid = uuid; + this.name = mojangAPI.getUUIDName(uuid); } @Override @@ -36,7 +41,8 @@ public class CacheEntry extends AsyncItem { new ConfirmGUI(player, new ActionCallback() { @Override public void onConfirm() { - player.sendMessage(name + " cleared"); + mojangAPI.eraseFromCache(uuid); + player.sendMessage(name + " has been erased from the cache."); } @Override diff --git a/src/main/java/xyz/atnrch/nicko/mojang/MojangAPI.java b/src/main/java/xyz/atnrch/nicko/mojang/MojangAPI.java index fac38e2..3d9cf4b 100644 --- a/src/main/java/xyz/atnrch/nicko/mojang/MojangAPI.java +++ b/src/main/java/xyz/atnrch/nicko/mojang/MojangAPI.java @@ -14,6 +14,7 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; +import java.util.HashMap; import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -25,6 +26,8 @@ public class MojangAPI { private final Logger logger = Logger.getLogger("MojangAPI"); + private final HashMap uuidToName = new HashMap<>(); + private final CacheLoader> loader = new CacheLoader>() { @Nonnull public Optional load(@Nonnull String uuid) throws Exception { @@ -50,11 +53,19 @@ public class MojangAPI { final String parametrizedUrl = URL_NAME.replace("{name}", name); final JsonObject object = getRequestToUrl(parametrizedUrl); if (hasNoError(object)) { - return Optional.of(object.get("id").getAsString()); + final JsonElement idObject = object.get("id"); + final String id = idObject.getAsString(); + uuidToName.put(id, name); + return Optional.of(id); } return Optional.empty(); } + public void eraseFromCache(String uuid) { + cache.invalidate(uuid); + uuidToName.remove(uuid); + } + private Optional getSkinFromMojang(String uuid) throws IOException { final String parametrizedUrl = URL_SKIN.replace("{uuid}", uuid); final JsonObject object = getRequestToUrl(parametrizedUrl); @@ -66,6 +77,10 @@ public class MojangAPI { return Optional.empty(); } + public String getUUIDName(String uuid) { + return uuidToName.get(uuid); + } + private JsonObject getRequestToUrl(String parametrizedUrl) throws IOException { final URL url = new URL(parametrizedUrl); final HttpsURLConnection con = (HttpsURLConnection) url.openConnection();