diff options
author | Tyler Murphy <tylermurphy534@gmail.com> | 2021-12-30 12:17:32 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-30 12:17:32 -0500 |
commit | 31d60d7d23715aa3f063241c0c420ea0b0bf003b (patch) | |
tree | ca43ffa540d9629f6f0faf2ab3d5e5941db0f352 /src/main/java/net/tylermurphy/hideAndSeek/util/UUIDFetcher.java | |
parent | Merge pull request #16 from tylermurphy534/1.3.2 (diff) | |
parent | 1.3.3 rc5 (diff) | |
download | kenshinshideandseek-31d60d7d23715aa3f063241c0c420ea0b0bf003b.tar.gz kenshinshideandseek-31d60d7d23715aa3f063241c0c420ea0b0bf003b.tar.bz2 kenshinshideandseek-31d60d7d23715aa3f063241c0c420ea0b0bf003b.zip |
Merge pull request #20 from tylermurphy534/1.3.3
1.3.3
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/util/UUIDFetcher.java')
-rw-r--r-- | src/main/java/net/tylermurphy/hideAndSeek/util/UUIDFetcher.java | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/UUIDFetcher.java b/src/main/java/net/tylermurphy/hideAndSeek/util/UUIDFetcher.java new file mode 100644 index 0000000..ef65af3 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/UUIDFetcher.java @@ -0,0 +1,106 @@ +/* + * This file is part of Kenshins Hide and Seek + * + * Copyright (c) 2021 Tyler Murphy. + * + * Kenshins Hide and Seek free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * he Free Software Foundation version 3. + * + * Kenshins Hide and Seek 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, see <http://www.gnu.org/licenses/>. + * + */ + +package net.tylermurphy.hideAndSeek.util; + +import net.tylermurphy.hideAndSeek.Main; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public final class UUIDFetcher { + + private static final Map<String,UUID> CACHE = new HashMap<>(); + + private static final String UUID_URL = "https://api.mojang.com/users/profiles/minecraft/"; + private static int cacheTask; + + public static void init(){ + cacheTask = Main.plugin.getServer().getScheduler().scheduleSyncRepeatingTask(Main.plugin, CACHE::clear,600*20, 600*20); + } + + public static void cleanup(){ + Main.plugin.getServer().getScheduler().cancelTask(cacheTask); + } + + public static UUID getUUID(String playername) { + + if(CACHE.containsKey(playername)) return CACHE.get(playername); + + String output = callURL(UUID_URL + playername); + StringBuilder result = new StringBuilder(); + readData(output, result); + String u = result.toString(); + StringBuilder uuid = new StringBuilder(); + for (int i = 0; i <= 31; i++) { + uuid.append(u.charAt(i)); + if (i == 7 || i == 11 || i == 15 || i == 19) { + uuid.append('-'); + } + } + + CACHE.put(playername, UUID.fromString(uuid.toString())); + + return UUID.fromString(uuid.toString()); + } + + private static void readData(String toRead, StringBuilder result) { + for (int i = toRead.length() - 3; i >= 0; i--) { + if (toRead.charAt(i) != '"') { + result.insert(0, toRead.charAt(i)); + } else { + break; + } + } + } + + private static String callURL(String urlStr) { + StringBuilder sb = new StringBuilder(); + URLConnection urlConn; + InputStreamReader in; + try { + URL url = new URL(urlStr); + urlConn = url.openConnection(); + if (urlConn != null) { + urlConn.setReadTimeout(60 * 1000); + } + if (urlConn != null && urlConn.getInputStream() != null) { + in = new InputStreamReader(urlConn.getInputStream(), + Charset.defaultCharset()); + BufferedReader bufferedReader = new BufferedReader(in); + int cp; + while ((cp = bufferedReader.read()) != -1) { + sb.append((char) cp); + } + bufferedReader.close(); + in.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return sb.toString(); + } + +} |