Skip to content

Commit 261291f

Browse files
committed
Get rid of getManifest calls in getProtectionDomain. Fix resize patch for Indev
1 parent e681e19 commit 261291f

8 files changed

Lines changed: 47 additions & 34 deletions

File tree

doc/org.mcphackers.launchwrapper.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
"name": "org.ow2.asm:asm-tree:9.9",
1616
"url": "https://maven.fabricmc.net/"
1717
},
18+
{
19+
"name": "org.ow2.asm:asm-commons:9.9",
20+
"url": "https://maven.fabricmc.net/"
21+
},
1822
{
1923
"name": "org.json:json:20250517",
2024
"url": "https://repo1.maven.org/maven2/"

launchwrapper-fabric/src/main/java/org/mcphackers/launchwrapper/inject/LWGameProvider.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,19 @@
77
import java.nio.file.Path;
88
import java.nio.file.Paths;
99
import java.security.CodeSource;
10-
import java.util.*;
10+
import java.util.ArrayList;
11+
import java.util.Collection;
12+
import java.util.Collections;
13+
import java.util.EnumSet;
14+
import java.util.HashMap;
15+
import java.util.List;
16+
import java.util.Locale;
17+
import java.util.Map;
18+
import java.util.Set;
19+
20+
import org.mcphackers.launchwrapper.Launch;
21+
import org.mcphackers.launchwrapper.LaunchConfig;
22+
import org.mcphackers.launchwrapper.target.MainLaunchTarget;
1123

1224
import net.fabricmc.api.EnvType;
1325
import net.fabricmc.loader.api.ObjectShare;
@@ -31,13 +43,6 @@
3143
import net.fabricmc.loader.impl.util.ExceptionUtil;
3244
import net.fabricmc.loader.impl.util.SystemProperties;
3345

34-
import org.mcphackers.launchwrapper.Launch;
35-
import org.mcphackers.launchwrapper.LaunchConfig;
36-
import org.mcphackers.launchwrapper.target.MainLaunchTarget;
37-
import org.mcphackers.launchwrapper.tweak.FabricLoaderTweak;
38-
import org.mcphackers.launchwrapper.tweak.Tweak;
39-
import org.mcphackers.launchwrapper.util.ClassNodeSource;
40-
4146
public class LWGameProvider implements GameProvider {
4247
private static final Set<BuiltinTransform> TRANSFORM_WIDENALL_STRIPENV_CLASSTWEAKS = EnumSet.of(BuiltinTransform.WIDEN_ALL_PACKAGE_ACCESS, BuiltinTransform.STRIP_ENVIRONMENT, BuiltinTransform.CLASS_TWEAKS);
4348
private static final Set<BuiltinTransform> TRANSFORM_WIDENALL_CLASSTWEAKS = EnumSet.of(BuiltinTransform.WIDEN_ALL_PACKAGE_ACCESS, BuiltinTransform.CLASS_TWEAKS);

src/main/java/org/mcphackers/launchwrapper/loader/LaunchClassLoader.java

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import java.util.Set;
2525
import java.util.jar.JarEntry;
2626
import java.util.jar.JarFile;
27-
import java.util.jar.Manifest;
2827

2928
import org.mcphackers.launchwrapper.Launch;
3029
import org.mcphackers.launchwrapper.tweak.Tweaker;
@@ -415,29 +414,28 @@ protected ProtectionDomain getProtectionDomain(String name) {
415414
}
416415

417416
CodeSigner[] signers = null;
418-
int i = name.lastIndexOf('.');
419417

420418
try {
421419
URLConnection urlConnection = resource.openConnection();
422420
if (urlConnection instanceof JarURLConnection) {
423421
final JarURLConnection jarURLConnection = (JarURLConnection)urlConnection;
424-
JarFile jarFile;
425-
jarFile = jarURLConnection.getJarFile();
422+
// final Manifest manifest = jarURLConnection.getManifest(); // Slow as hell
423+
final JarFile jarFile = jarURLConnection.getJarFile();
426424

427-
if (jarFile != null && jarFile.getManifest() != null) {
428-
final Manifest manifest = jarFile.getManifest();
425+
if (jarFile != null /* && manifest != null */) {
429426
final JarEntry entry = jarFile.getJarEntry(classResourceName(name));
430427
if (entry != null) {
431428
signers = entry.getCodeSigners();
432429
}
433-
if (i != -1) {
434-
String pkgName = name.substring(0, i);
435-
436-
Package pkg = getPackage(pkgName);
437-
if (pkg == null) {
438-
pkg = definePackage(pkgName, manifest, jarURLConnection.getJarFileURL());
439-
}
440-
}
430+
// int i = name.lastIndexOf('.');
431+
// if (i != -1) {
432+
// String pkgName = name.substring(0, i);
433+
434+
// Package pkg = getPackage(pkgName);
435+
// if (pkg == null) {
436+
// pkg = definePackage(pkgName, manifest, resource);
437+
// }
438+
// }
441439
}
442440
}
443441
} catch (IOException e) {

src/main/java/org/mcphackers/launchwrapper/protocol/MinecraftURLStreamHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ protected URLConnection openConnection(URL url) throws IOException {
6868
return new HeartbeatURLConnection(url);
6969
if (host.equals("mcoapi.minecraft.net")) {
7070
if (config.realmsServer.get() != null) {
71-
return openDirectConnection(new URL("http", config.realmsServer.get(), config.realmsPort.get(), file));
71+
return super.openConnection(new URL("http", config.realmsServer.get(), config.realmsPort.get(), file));
7272
} else {
7373
if (path.equals("/mco/available"))
7474
return new BasicResponseURLConnection(url, "true");
@@ -84,6 +84,6 @@ protected URLConnection openConnection(URL url) throws IOException {
8484
if (host.equals("skins.local"))
8585
return new LocalSkinURLConnection(url);
8686

87-
return openDirectConnection(url);
87+
return super.openConnection(url);
8888
}
8989
}

src/main/java/org/mcphackers/launchwrapper/protocol/URLStreamHandlerProxy.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public abstract class URLStreamHandlerProxy extends URLStreamHandler {
1717
private static final Map<String, URLStreamHandler> DEFAULT_HANDLERS = new HashMap<String, URLStreamHandler>();
1818
private static final Hashtable<String, URLStreamHandler> HANDLERS = getHandlers();
1919

20-
protected URLStreamHandler parent;
20+
protected URLStreamHandlerProxy parent;
2121

2222
@Override
2323
protected final URLConnection openConnection(URL url, Proxy p) throws IOException {
@@ -26,6 +26,9 @@ protected final URLConnection openConnection(URL url, Proxy p) throws IOExceptio
2626

2727
@Override
2828
protected URLConnection openConnection(URL url) throws IOException {
29+
if (parent != null) {
30+
return parent.openConnection(url);
31+
}
2932
return openDirectConnection(url);
3033
}
3134

@@ -36,7 +39,10 @@ public static URLConnection openDirectConnection(URL url) throws IOException {
3639
}
3740

3841
public static void setURLStreamHandler(String protocol, URLStreamHandlerProxy handler) {
39-
handler.parent = getURLStreamHandler(protocol);
42+
URLStreamHandler currentHandler = getURLStreamHandler(protocol);
43+
if (currentHandler instanceof URLStreamHandlerProxy) {
44+
handler.parent = (URLStreamHandlerProxy)currentHandler;
45+
}
4046
HANDLERS.put(protocol, handler);
4147
}
4248

src/main/java/org/mcphackers/launchwrapper/tweak/LegacyTweak.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,8 @@ public LaunchTarget getLaunchTarget() {
135135
// Minecraft shows unknown unicode symbol in place of U+00A0 (NON-BREAKING SPACE) in dates, force old locale provider to use space
136136
System.setProperty("java.locale.providers", "SPI");
137137
}
138-
MinecraftURLStreamHandler handler = new MinecraftURLStreamHandler(config);
139-
URLStreamHandlerProxy.setURLStreamHandler("http", handler);
140-
URLStreamHandlerProxy.setURLStreamHandler("https", handler);
138+
URLStreamHandlerProxy.setURLStreamHandler("http", new MinecraftURLStreamHandler(config));
139+
URLStreamHandlerProxy.setURLStreamHandler("https", new MinecraftURLStreamHandler(config));
141140
MainLaunchTarget target = new MainLaunchTarget(context.getMinecraft().name, new String[] { config.username.get(), config.session.get() });
142141
return target;
143142
}

src/main/java/org/mcphackers/launchwrapper/tweak/VanillaTweak.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,8 @@ public LaunchTarget getLaunchTarget() {
6060
// Fixed in 1.12.2??? Breaks in 1.14.4?? Works in 1.20 and above
6161
System.setProperty("java.locale.providers", "SPI");
6262
}
63-
MinecraftURLStreamHandler handler = new MinecraftURLStreamHandler(config);
64-
URLStreamHandlerProxy.setURLStreamHandler("http", handler);
65-
URLStreamHandlerProxy.setURLStreamHandler("https", handler);
63+
URLStreamHandlerProxy.setURLStreamHandler("http", new MinecraftURLStreamHandler(config));
64+
URLStreamHandlerProxy.setURLStreamHandler("https", new MinecraftURLStreamHandler(config));
6665
return new MainLaunchTarget(MAIN_CLASS, context.args);
6766
}
6867

src/main/java/org/mcphackers/launchwrapper/tweak/injection/legacy/LWJGLPatch.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ private boolean displayPatch(MethodNode init, boolean supportsResizing, ClassNod
278278
if (compareInsn(insns[0], GETFIELD, minecraft.name, context.width.name, context.width.desc) &&
279279
compareInsn(insns[2], GETFIELD, minecraft.name, context.height.name, context.height.desc) &&
280280
compareInsn(insns[3], INVOKESPECIAL, null, "<init>", "(L" + minecraft.name + ";II)V")) {
281+
// new Hud(Minecraft, width, height)
281282
MethodInsnNode invoke = (MethodInsnNode)insns[3];
282283
ClassNode hud = source.getClass(invoke.owner);
283284
MethodNode initHud = NodeHelper.getMethod(hud, invoke.name, invoke.desc);
@@ -308,11 +309,12 @@ private boolean displayPatch(MethodNode init, boolean supportsResizing, ClassNod
308309
if (putFieldWidth == null || putFieldHeight == null) {
309310
break;
310311
}
311-
// render(FZII)V || render(FII)V
312-
if (m.desc.equals("(FZII)V") || m.desc.equals("(ZII)V")) {
312+
// render(FZII)V || render(FII)V || render()V
313+
if (m.desc.equals("(FZII)V") || m.desc.equals("(ZII)V") || m.desc.equals("()V")) {
313314
insn2 = getFirst(m.instructions);
314315
while (insn2 != null) {
315316
if (compareInsn(insn2, GETFIELD, hud.name, null, "L" + minecraft.name + ";")) {
317+
// Update hud width/heigth values on resize in classic and indev
316318
InsnList insert = new InsnList();
317319
insert.add(new InsnNode(DUP)); // MC, MC
318320
insert.add(new FieldInsnNode(GETFIELD, minecraft.name, context.width.name, context.width.desc));

0 commit comments

Comments
 (0)