Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 112 lines 6.1 kB view raw
1package com.legacyminecraft.poseidon.uuid; 2 3import com.legacyminecraft.poseidon.PoseidonConfig; 4import com.legacyminecraft.poseidon.util.GetUUIDFetcher; 5import com.legacyminecraft.poseidon.util.UUIDResult; 6import com.projectposeidon.johnymuffin.LoginProcessHandler; 7import net.minecraft.server.Packet1Login; 8import org.bukkit.ChatColor; 9 10import java.util.UUID; 11 12import static com.legacyminecraft.poseidon.util.UUIDFetcher.getUUIDOf; 13import static com.projectposeidon.johnymuffin.UUIDManager.generateOfflineUUID; 14 15public class ThreadUUIDFetcher extends Thread { 16 17 final Packet1Login loginPacket; 18 // final NetLoginHandler netLoginHandler; 19 final LoginProcessHandler loginProcessHandler; 20 final boolean useGetMethod; 21 22 public ThreadUUIDFetcher(Packet1Login packet1Login, LoginProcessHandler loginProcessHandler, boolean useGetMethod) { 23// this.netLoginHandler = netloginhandler; // The login handler 24 this.loginProcessHandler = loginProcessHandler; 25 this.loginPacket = packet1Login; // The login packet 26 this.useGetMethod = useGetMethod; 27 28 } 29 30 public void run() { 31 if (useGetMethod) { 32 getMethod(); 33 } else { 34 postMethod(); 35 } 36 37 } 38 39 public void getMethod() { 40 UUIDResult uuidResult; 41 GetUUIDFetcher.UUIDAndUsernameResult uuidAndUsernameResult = GetUUIDFetcher.getUUID(loginPacket.name); 42 uuidResult = uuidAndUsernameResult.getUuidResult(); 43 44 if (uuidResult.getReturnType().equals(UUIDResult.ReturnType.ONLINE) && uuidAndUsernameResult.getReturnedUsername().equals(loginPacket.name)) { 45 System.out.println("[Poseidon] Fetched UUID from Mojang for " + loginPacket.name + " using GET - " + uuidResult.getUuid().toString()); 46 loginProcessHandler.userUUIDReceived(uuidResult.getUuid(), true); 47 return; 48 } else if (uuidResult.getReturnType().equals(UUIDResult.ReturnType.ONLINE)) { 49 if (PoseidonConfig.getInstance().getConfigBoolean("settings.uuid-fetcher.get.enforce-case-sensitivity.enabled")) { 50 System.out.println("[Poseidon] Fetched UUID from Mojang for " + loginPacket.name + " using GET - " + uuidResult.getUuid().toString() + " however, the username returned was " + uuidAndUsernameResult.getReturnedUsername() + ". The user has been kicked as the server is configured to use case sensitive usernames"); 51 loginProcessHandler.cancelLoginProcess(ChatColor.RED + "Sorry, that username has invalid casing"); 52 return; 53 } else { 54 System.out.println("[Poseidon] Fetched UUID from Mojang for " + loginPacket.name + " - " + uuidResult.getUuid().toString()); 55 loginProcessHandler.userUUIDReceived(uuidResult.getUuid(), true); 56 return; 57 } 58 } else if (uuidResult.getReturnType().equals(UUIDResult.ReturnType.OFFLINE)) { 59 if ((boolean) PoseidonConfig.getInstance().getProperty("settings.uuid-fetcher.allow-graceful-uuids.value")) { 60 System.out.println("[Poseidon] " + loginPacket.name + " does not have a Mojang UUID associated with their name"); 61 UUID offlineUUID = uuidResult.getUuid(); 62 loginProcessHandler.userUUIDReceived(offlineUUID, false); 63 System.out.println("[Poseidon] Using Offline Based UUID for " + loginPacket.name + " - " + offlineUUID); 64 } else { 65 System.out.println("[Poseidon] " + loginPacket.name + " does not have a UUID with Mojang. Player has been kicked as graceful UUID is disabled"); 66 loginProcessHandler.cancelLoginProcess(ChatColor.RED + "Sorry, we only support premium accounts"); 67 } 68 return; 69 } 70 System.out.println("[Poseidon] Failed to fetch UUID for " + loginPacket.name + " using GET method from Mojang."); 71 System.out.println("[Poseidon] Mojang's API may be offline, your internet connection may be down, or something else may be wrong."); 72 73 uuidResult.getException().printStackTrace(); 74 loginProcessHandler.cancelLoginProcess(ChatColor.RED + "Sorry, we can't connect to Mojang currently, please try again later"); 75 76 } 77 78 79 public void postMethod() { 80 UUID uuid; 81 try { 82 uuid = getUUIDOf(loginPacket.name); 83 if (uuid == null) { 84 if (PoseidonConfig.getInstance().getConfigBoolean("settings.uuid-fetcher.allow-graceful-uuids.value", true)) { 85 System.out.println("[Poseidon] " + loginPacket.name + " does not have a Mojang UUID associated with their name"); 86 UUID offlineUUID = generateOfflineUUID(loginPacket.name); 87 loginProcessHandler.userUUIDReceived(offlineUUID, false); 88 System.out.println("[Poseidon] Using Offline Based UUID for " + loginPacket.name + " - " + offlineUUID); 89 } else { 90 System.out.println("[Poseidon] " + loginPacket.name + " does not have a UUID with Mojang. Player has been kicked as graceful UUID is disabled"); 91 loginProcessHandler.cancelLoginProcess(ChatColor.RED + "Sorry, we only support premium accounts"); 92 } 93 } else { 94 System.out.println("[Poseidon] Fetched UUID from Mojang for " + loginPacket.name + " using POST - " + uuid.toString()); 95 loginProcessHandler.userUUIDReceived(uuid, true); 96 } 97 } catch (Exception e) { 98 System.out.println("[Poseidon] Mojang failed contact for user " + loginPacket.name + ":"); 99 100 System.out.println("[Poseidon] If this issue persists, please utilize the GET method. Mojang's API frequently has issues with POST requests."); 101 System.out.println("[Poseidon] You can do this by changing settings.uuid-fetcher.method.value to GET in the config"); 102 103 e.printStackTrace(); 104 loginProcessHandler.cancelLoginProcess(ChatColor.RED + "Sorry, we can't connect to Mojang currently, please try again later"); 105 } 106 107 } 108 109 110} 111 112