Port to 1.20.2 (#305)
Co-authored-by: Cloudburst <18114966+C10udburst@users.noreply.github.com>
This commit is contained in:
@@ -7,7 +7,7 @@ import meteordevelopment.meteorclient.mixin.MinecraftClientAccessor;
|
||||
import meteordevelopment.meteorclient.systems.accounts.Account;
|
||||
import meteordevelopment.meteorclient.systems.accounts.AccountType;
|
||||
import meteordevelopment.meteorclient.utils.misc.NbtException;
|
||||
import net.minecraft.client.util.Session;
|
||||
import net.minecraft.client.session.Session;
|
||||
import net.minecraft.nbt.NbtCompound;
|
||||
|
||||
import static meteordevelopment.meteorclient.MeteorClient.mc;
|
||||
@@ -27,7 +27,7 @@ public class CustomYggdrasilAccount extends Account<CustomYggdrasilAccount> {
|
||||
Session session = CustomYggdrasilLogin.login(name, password, server);
|
||||
|
||||
cache.username = session.getUsername();
|
||||
cache.uuid = session.getUuid();
|
||||
cache.uuid = session.getUuidOrNull().toString();
|
||||
|
||||
return true;
|
||||
} catch (AuthenticationException e) {
|
||||
|
||||
@@ -15,7 +15,7 @@ import com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService;
|
||||
import com.mojang.authlib.yggdrasil.response.MinecraftTexturesPayload;
|
||||
import com.mojang.util.UUIDTypeAdapter;
|
||||
import meteordevelopment.meteorclient.utils.network.Http;
|
||||
import net.minecraft.client.util.Session;
|
||||
import net.minecraft.client.session.Session;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -28,7 +28,11 @@ import java.security.spec.InvalidKeySpecException;
|
||||
import java.security.spec.X509EncodedKeySpec;
|
||||
import java.util.*;
|
||||
|
||||
import static meteordevelopment.meteorclient.MeteorClient.mc;
|
||||
|
||||
public class CustomYggdrasilLogin {
|
||||
public static Environment localYggdrasilApi = new Environment("/api", "/sessionserver", "/minecraftservices", "Custom-Yggdrasil");
|
||||
|
||||
public static Session login(String name, String password, String server) throws AuthenticationException {
|
||||
try {
|
||||
String url = server + "/authserver/authenticate";
|
||||
@@ -47,7 +51,7 @@ public class CustomYggdrasilLogin {
|
||||
throw new AuthenticationException(json.get("errorMessage").getAsString());
|
||||
}
|
||||
String token = json.get("accessToken").getAsString();
|
||||
String uuid = json.get("selectedProfile").getAsJsonObject().get("id").getAsString();
|
||||
UUID uuid = UUID.fromString(json.get("selectedProfile").getAsJsonObject().get("id").getAsString());
|
||||
String username = json.get("selectedProfile").getAsJsonObject().get("name").getAsString();
|
||||
return new Session(username, uuid, token, Optional.empty(), Optional.empty(), Session.AccountType.MOJANG);
|
||||
} catch (Exception e) {
|
||||
@@ -55,57 +59,13 @@ public class CustomYggdrasilLogin {
|
||||
}
|
||||
}
|
||||
|
||||
public static class LocalYggdrasilApi implements Environment {
|
||||
private final String url;
|
||||
|
||||
public LocalYggdrasilApi(String serverUrl) {
|
||||
this.url = serverUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthHost() {
|
||||
return url + "/authserver";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccountsHost() {
|
||||
return url + "/api";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSessionHost() {
|
||||
return url + "/sessionserver";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getServicesHost() {
|
||||
return url + "/minecraftservices";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Custom-Yggdrasil";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String asString() {
|
||||
return new StringJoiner(", ", "", "")
|
||||
.add("authHost='" + getAuthHost() + "'")
|
||||
.add("accountsHost='" + getAccountsHost() + "'")
|
||||
.add("sessionHost='" + getSessionHost() + "'")
|
||||
.add("servicesHost='" + getServicesHost() + "'")
|
||||
.add("name='" + getName() + "'")
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
|
||||
public static class LocalYggdrasilMinecraftSessionService extends YggdrasilMinecraftSessionService {
|
||||
private static final Logger LOGGER = LogManager.getLogger();
|
||||
private final PublicKey publicKey;
|
||||
private final Gson gson = new GsonBuilder().registerTypeAdapter(UUID.class, new UUIDTypeAdapter()).create();
|
||||
|
||||
public LocalYggdrasilMinecraftSessionService(YggdrasilAuthenticationService service, String serverUrl) {
|
||||
super(service, new LocalYggdrasilApi(serverUrl));
|
||||
super(service.getServicesKeySet(), mc.getNetworkProxy(), localYggdrasilApi);
|
||||
String data = Http.get(serverUrl).sendString();
|
||||
JsonObject json = JsonParser.parseString(data).getAsJsonObject();
|
||||
this.publicKey = getPublicKey(json.get("signaturePublickey").getAsString());
|
||||
@@ -144,17 +104,17 @@ public class CustomYggdrasilLogin {
|
||||
|
||||
final MinecraftTexturesPayload result;
|
||||
try {
|
||||
final String json = new String(org.apache.commons.codec.binary.Base64.decodeBase64(textureProperty.getValue()), StandardCharsets.UTF_8);
|
||||
final String json = new String(org.apache.commons.codec.binary.Base64.decodeBase64(textureProperty.value()), StandardCharsets.UTF_8);
|
||||
result = gson.fromJson(json, MinecraftTexturesPayload.class);
|
||||
} catch (final JsonParseException e) {
|
||||
LOGGER.error("Could not decode textures payload", e);
|
||||
return new HashMap<>();
|
||||
}
|
||||
|
||||
if (result == null || result.getTextures() == null)
|
||||
if (result == null || result.textures() == null)
|
||||
return new HashMap<>();
|
||||
|
||||
return result.getTextures();
|
||||
return result.textures();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,7 +122,7 @@ public class CustomYggdrasilLogin {
|
||||
public final String server;
|
||||
|
||||
public LocalYggdrasilAuthenticationService(Proxy proxy, String server) {
|
||||
super(proxy, new LocalYggdrasilApi(server));
|
||||
super(proxy, localYggdrasilApi);
|
||||
this.server = server;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ public class LegacyServerPinger {
|
||||
}
|
||||
|
||||
public void ping(String ip, int port) {
|
||||
server = new ServerInfo("", ip + ":" + port, false);
|
||||
server = new ServerInfo("", ip + ":" + port, ServerInfo.ServerType.OTHER);
|
||||
|
||||
new Thread(() -> pingInCurrentThread(ip, port),
|
||||
"Server Pinger #" + threadNumber.incrementAndGet()).start();
|
||||
|
||||
@@ -16,12 +16,13 @@ import net.minecraft.network.listener.ClientQueryPacketListener;
|
||||
import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket;
|
||||
import net.minecraft.network.packet.c2s.query.QueryPingC2SPacket;
|
||||
import net.minecraft.network.packet.c2s.query.QueryRequestC2SPacket;
|
||||
import net.minecraft.network.packet.s2c.query.QueryPongS2CPacket;
|
||||
import net.minecraft.network.packet.s2c.query.PingResultS2CPacket;
|
||||
import net.minecraft.network.packet.s2c.query.QueryResponseS2CPacket;
|
||||
import net.minecraft.server.ServerMetadata;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Util;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.profiler.PerformanceLog;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -74,13 +75,13 @@ public class ServerListPinger {
|
||||
notifyDisconnectListeners();
|
||||
}
|
||||
}, 20000);
|
||||
final ClientConnection clientConnection = ClientConnection.connect(new InetSocketAddress(InetAddress.getByName(serverAddress.getAddress()), serverAddress.getPort()), false);
|
||||
final ClientConnection clientConnection = ClientConnection.connect(new InetSocketAddress(InetAddress.getByName(serverAddress.getAddress()), serverAddress.getPort()), false, (PerformanceLog) null);
|
||||
failedToConnect = false;
|
||||
this.clientConnections.add(clientConnection);
|
||||
entry.label = "multiplayer.status.pinging";
|
||||
entry.ping = -1L;
|
||||
entry.playerListSummary = null;
|
||||
clientConnection.setPacketListener(new ClientQueryPacketListener() {
|
||||
ClientQueryPacketListener clientQueryPacketListener = new ClientQueryPacketListener() {
|
||||
private boolean sentQuery;
|
||||
private boolean received;
|
||||
private long startTime;
|
||||
@@ -135,7 +136,7 @@ public class ServerListPinger {
|
||||
}
|
||||
}
|
||||
|
||||
public void onPong(QueryPongS2CPacket packet) {
|
||||
public void onPingResult(PingResultS2CPacket packet) {
|
||||
long l = this.startTime;
|
||||
long m = Util.getMeasuringTimeMs();
|
||||
entry.ping = m - l;
|
||||
@@ -157,10 +158,12 @@ public class ServerListPinger {
|
||||
public boolean isConnectionOpen() {
|
||||
return clientConnection.isOpen();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
clientConnection.setPacketListener(clientQueryPacketListener);
|
||||
|
||||
try {
|
||||
clientConnection.send(new HandshakeC2SPacket(serverAddress.getAddress(), serverAddress.getPort(), NetworkState.STATUS));
|
||||
clientConnection.connect(serverAddress.getAddress(), serverAddress.getPort(), clientQueryPacketListener);
|
||||
clientConnection.send(new QueryRequestC2SPacket());
|
||||
} catch (Throwable var8) {
|
||||
LOGGER.error("Failed to ping server {}", serverAddress, var8);
|
||||
|
||||
Reference in New Issue
Block a user