Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
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