Merge remote-tracking branch 'upstream/develop' into skinfix

Signed-off-by: TheKodeToad <TheKodeToad@proton.me>
This commit is contained in:
TheKodeToad
2023-09-02 22:13:50 +01:00
765 changed files with 21366 additions and 19387 deletions

View File

@ -54,6 +54,8 @@
package org.prismlauncher.legacy;
import org.prismlauncher.utils.logging.Log;
import java.applet.Applet;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
@ -70,12 +72,9 @@ import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import org.prismlauncher.utils.logging.Log;
import net.minecraft.Launcher;
final class LegacyFrame extends JFrame {
private static final long serialVersionUID = 1L;
private final Launcher launcher;
@ -96,8 +95,8 @@ final class LegacyFrame extends JFrame {
addWindowListener(new ForceExitHandler());
}
public void start(String user, String session, int width, int height, boolean maximize, String serverAddress,
String serverPort, boolean demo) {
public void start(
String user, String session, int width, int height, boolean maximize, String serverAddress, String serverPort, boolean demo) {
// Implements support for launching in to multiplayer on classic servers using a
// mpticket file generated by an external program and stored in the instance's
// root folder.
@ -157,7 +156,6 @@ final class LegacyFrame extends JFrame {
}
private final class ForceExitHandler extends WindowAdapter {
@Override
public void windowClosing(WindowEvent event) {
// FIXME better solution
@ -184,7 +182,5 @@ final class LegacyFrame extends JFrame {
// old minecraft versions can hang without this >_<
System.exit(0);
}
}
}

View File

@ -55,6 +55,11 @@
package org.prismlauncher.legacy;
import org.prismlauncher.launcher.impl.AbstractLauncher;
import org.prismlauncher.utils.Parameters;
import org.prismlauncher.utils.ReflectionUtils;
import org.prismlauncher.utils.logging.Log;
import java.applet.Applet;
import java.io.File;
import java.lang.invoke.MethodHandle;
@ -65,16 +70,10 @@ import java.lang.reflect.Modifier;
import java.util.Collections;
import java.util.List;
import org.prismlauncher.launcher.impl.AbstractLauncher;
import org.prismlauncher.utils.Parameters;
import org.prismlauncher.utils.ReflectionUtils;
import org.prismlauncher.utils.logging.Log;
/**
* Used to launch old versions which support applets.
*/
final class LegacyLauncher extends AbstractLauncher {
private final String user, session;
private final String title;
private final String appletClass;
@ -111,8 +110,7 @@ final class LegacyLauncher extends AbstractLauncher {
try {
LegacyFrame window = new LegacyFrame(title, createAppletClass(appletClass));
window.start(user, session, width, height, maximize, serverAddress, serverPort,
gameArgs.contains("--demo"));
window.start(user, session, width, height, maximize, serverAddress, serverPort, gameArgs.contains("--demo"));
return;
} catch (Throwable e) {
Log.error("Running applet wrapper failed with exception; falling back to main class", e);
@ -124,12 +122,12 @@ final class LegacyLauncher extends AbstractLauncher {
MethodHandle method = ReflectionUtils.findMainMethod(main);
method.invokeExact(gameArgs.toArray(new String[0]));
}
<<<<<<< HEAD:libraries/launcher/legacy/org/prismlauncher/legacy/LegacyLauncher.java
private static Applet createAppletClass(String clazz) throws Throwable {
Class<?> appletClass = ClassLoader.getSystemClassLoader().loadClass(clazz);
MethodHandle appletConstructor = MethodHandles.lookup().findConstructor(appletClass,
MethodType.methodType(void.class));
MethodHandle appletConstructor = MethodHandles.lookup().findConstructor(appletClass, MethodType.methodType(void.class));
return (Applet) appletConstructor.invoke();
}
@ -156,4 +154,6 @@ final class LegacyLauncher extends AbstractLauncher {
return null;
}
=======
>>>>>>> upstream/develop:libraries/launcher/org/prismlauncher/launcher/impl/legacy/LegacyLauncher.java
}

View File

@ -58,7 +58,6 @@ import org.prismlauncher.utils.Parameters;
// implementation of LegacyProxy
public final class LegacyProxy {
public static Launcher createLauncher(Parameters params) {
return new LegacyLauncher(params);
}
@ -66,5 +65,4 @@ public final class LegacyProxy {
public static void applyOnlineFixes(Parameters parameters) {
OnlineFixes.apply(parameters);
}
}

View File

@ -35,16 +35,15 @@
package org.prismlauncher.legacy.fix.online;
import org.prismlauncher.legacy.utils.url.UrlUtils;
import java.io.IOException;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
import org.prismlauncher.legacy.utils.url.UrlUtils;
final class Handler extends URLStreamHandler {
@Override
protected URLConnection openConnection(URL address) throws IOException {
return openConnection(address, null);
@ -61,5 +60,4 @@ final class Handler extends URLStreamHandler {
return UrlUtils.openConnection(address, proxy);
}
}

View File

@ -35,15 +35,15 @@
package org.prismlauncher.legacy.fix.online;
import java.net.URL;
import java.net.URLStreamHandler;
import java.net.URLStreamHandlerFactory;
import org.prismlauncher.legacy.utils.Base64;
import org.prismlauncher.legacy.utils.url.UrlUtils;
import org.prismlauncher.utils.Parameters;
import org.prismlauncher.utils.logging.Log;
import java.net.URL;
import java.net.URLStreamHandler;
import java.net.URLStreamHandlerFactory;
/**
* Fixes skins by redirecting to other URLs.
*
@ -51,7 +51,6 @@ import org.prismlauncher.utils.logging.Log;
* @see {@link UrlUtils}
*/
public final class OnlineFixes implements URLStreamHandlerFactory {
public static void apply(Parameters params) {
if (!"true".equals(params.getString("onlineFixes", null)))
return;
@ -77,5 +76,4 @@ public final class OnlineFixes implements URLStreamHandlerFactory {
return null;
}
}

View File

@ -52,6 +52,11 @@
package org.prismlauncher.legacy.fix.online;
import org.prismlauncher.legacy.utils.api.MojangApi;
import org.prismlauncher.legacy.utils.api.Texture;
import org.prismlauncher.legacy.utils.url.CustomUrlConnection;
import org.prismlauncher.legacy.utils.url.UrlUtils;
import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
@ -64,13 +69,7 @@ import java.net.URLConnection;
import javax.imageio.ImageIO;
import org.prismlauncher.legacy.utils.api.MojangApi;
import org.prismlauncher.legacy.utils.api.Texture;
import org.prismlauncher.legacy.utils.url.CustomUrlConnection;
import org.prismlauncher.legacy.utils.url.UrlUtils;
final class SkinFix {
static URLConnection openConnection(URL address, Proxy proxy) throws IOException {
String skinOwner = findSkinOwner(address);
if (skinOwner != null)
@ -154,7 +153,7 @@ final class SkinFix {
case "www.minecraft.net":
if (!address.getPath().equals("/cloak/get.jsp"))
return null;
return stripIfPrefixed(address.getQuery(), "user=");
case "s3.amazonaws.com":
@ -177,5 +176,4 @@ final class SkinFix {
return null;
}
}

View File

@ -35,19 +35,18 @@
package org.prismlauncher.legacy.utils;
import org.prismlauncher.utils.logging.Log;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.nio.charset.StandardCharsets;
import org.prismlauncher.utils.logging.Log;
/**
* Uses Base64 with Java 8 or later, otherwise DatatypeConverter. In the latter
* case, reflection is used to allow using newer compilers.
*/
public final class Base64 {
private static boolean supported = true;
private static MethodHandle legacy;
@ -57,8 +56,8 @@ public final class Base64 {
} catch (ClassNotFoundException e) {
try {
Class<?> datatypeConverter = Class.forName("javax.xml.bind.DatatypeConverter");
legacy = MethodHandles.lookup().findStatic(datatypeConverter, "parseBase64Binary",
MethodType.methodType(byte[].class, String.class));
legacy = MethodHandles.lookup().findStatic(
datatypeConverter, "parseBase64Binary", MethodType.methodType(byte[].class, String.class));
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException e1) {
Log.error("Base64 not supported", e1);
supported = false;
@ -90,5 +89,4 @@ public final class Base64 {
throw new Error(e);
}
}
}

View File

@ -35,20 +35,19 @@
package org.prismlauncher.legacy.utils.api;
import org.prismlauncher.legacy.utils.Base64;
import org.prismlauncher.legacy.utils.json.JsonParser;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Map;
import org.prismlauncher.legacy.utils.Base64;
import org.prismlauncher.legacy.utils.json.JsonParser;
/**
* Basic wrapper for Mojang's Minecraft API.
*/
@SuppressWarnings("unchecked")
public final class MojangApi {
public static String getUuid(String username) throws IOException {
try (InputStream in = new URL("https://api.mojang.com/users/profiles/minecraft/" + username).openStream()) {
Map<String, Object> map = (Map<String, Object>) JsonParser.parse(in);
@ -80,14 +79,13 @@ public final class MojangApi {
}
public static Map<String, Object> getTextures(String player) throws IOException {
try (InputStream profileIn = new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + player)
.openStream()) {
try (InputStream profileIn = new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + player).openStream()) {
Map<String, Object> profile = (Map<String, Object>) JsonParser.parse(profileIn);
for (Map<String, Object> property : (Iterable<Map<String, Object>>) profile.get("properties")) {
if (property.get("name").equals("textures")) {
Map<String, Object> result = (Map<String, Object>) JsonParser
.parse(new String(Base64.decode((String) property.get("value"))));
Map<String, Object> result =
(Map<String, Object>) JsonParser.parse(new String(Base64.decode((String) property.get("value"))));
result = (Map<String, Object>) result.get("textures");
return result;
@ -97,5 +95,4 @@ public final class MojangApi {
return null;
}
}
}

View File

@ -41,7 +41,6 @@ import java.net.URL;
* Represents a texture from the Mojang API.
*/
public final class Texture {
private final URL url;
private final boolean slim;
@ -57,5 +56,4 @@ public final class Texture {
public boolean isSlim() {
return slim;
}
}

View File

@ -38,11 +38,9 @@ package org.prismlauncher.legacy.utils.json;
import java.io.IOException;
public final class JsonParseException extends IOException {
private static final long serialVersionUID = 1L;
public JsonParseException(String message) {
super(message);
}
}

View File

@ -51,7 +51,6 @@ import java.util.Map;
* available in a lot of versions.
*/
public final class JsonParser {
private final Reader in;
private char[] buffer;
private int pos, length;
@ -96,8 +95,8 @@ public final class JsonParser {
private void assertCharacter(char character) throws JsonParseException {
if (character() != character)
throw new JsonParseException("Expected '" + character + "' but got "
+ (character() != -1 ? ("'" + (char) character() + "'") : "EOF"));
throw new JsonParseException(
"Expected '" + character + "' but got " + (character() != -1 ? ("'" + (char) character() + "'") : "EOF"));
}
private void assertNoEOF(String expected) throws JsonParseException {
@ -106,8 +105,7 @@ public final class JsonParser {
}
private void skipWhitespace() throws IOException {
while (isWhitespace())
read();
while (isWhitespace()) read();
}
private boolean isWhitespace() {
@ -407,5 +405,4 @@ public final class JsonParser {
private boolean readNull() throws IOException {
return character() == 'n' && read() == 'u' && read() == 'l' && read() == 'l';
}
}

View File

@ -41,7 +41,6 @@ import java.io.InputStream;
import java.net.HttpURLConnection;
public final class CustomUrlConnection extends HttpURLConnection {
private final InputStream in;
public CustomUrlConnection(byte[] data) {
@ -75,5 +74,4 @@ public final class CustomUrlConnection extends HttpURLConnection {
public boolean usingProxy() {
return false;
}
}

View File

@ -35,6 +35,8 @@
package org.prismlauncher.legacy.utils.url;
import org.prismlauncher.utils.logging.Log;
import java.io.IOException;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
@ -44,14 +46,11 @@ import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
import org.prismlauncher.utils.logging.Log;
/**
* A utility class for URLs which uses reflection to access constructors for
* internal classes.
*/
public final class UrlUtils {
private static URLStreamHandler http;
private static MethodHandle openConnection;
@ -63,8 +62,7 @@ public final class UrlUtils {
http = (URLStreamHandler) getURLStreamHandler.invoke(null, "http");
// we next find the openConnection method
Method openConnectionReflect = URLStreamHandler.class.getDeclaredMethod("openConnection", URL.class,
Proxy.class);
Method openConnectionReflect = URLStreamHandler.class.getDeclaredMethod("openConnection", URL.class, Proxy.class);
openConnectionReflect.setAccessible(true);
openConnection = MethodHandles.lookup().unreflect(openConnectionReflect);
} catch (Throwable e) {
@ -106,5 +104,4 @@ public final class UrlUtils {
throw new AssertionError(e); // oh dear! this isn't meant to happen
}
}
}