fabric-loader icon indicating copy to clipboard operation
fabric-loader copied to clipboard

No longer use java.applet as it's scheduled for removal.

Open modmuss50 opened this issue 9 months ago • 6 comments

Seems to work, and wasnt too crazy, this should help ensure future java version support, see: https://openjdk.org/jeps/8345525

Tested only in b1.8.1 so far, needs testing in a wide range of versions.

Can we take this opertunity to fix some of the bugs with the applet versions, especially the incorrectly sized windows?

modmuss50 avatar Mar 27 '25 20:03 modmuss50

It doesn't improve much, I made the PR mostly so it's not forgotten about.

modmuss50 avatar Mar 28 '25 00:03 modmuss50

This has been proposed to be removed in J26: https://openjdk.org/projects/jdk/26/

Once there is an EA build for 26 this should be re tested.

modmuss50 avatar Jul 10 '25 13:07 modmuss50

Tested with the latest Java 26 EA build 17 this works fine for most older versions, but 1.4.7 is proving to be a bit tricky as it uses the applet classes in its own obfucated classes that the same gamepatch doesnt cover.

I think the solution here is to make a builtin transform that runs on every single class load, to point to the stubbed classes. This has an additional benefit of also patching mods that use applet classes (do any exist?).

I may also look into only applying these changes when running with Java 26 or later as there is no point in breaking something that already works.

modmuss50 avatar Oct 03 '25 19:10 modmuss50

image

Now seems to work with all versions (that I have tested), we cannot easily skip these changes pre java 26 as our own AppletLauncher class needs to compile against either loaders stub or java's real applet. As we wont want to be stuck forever using Java 25 or older to compile loader I think the best solution is to just take the jump and move fully away from it now, with no option to go back.

modmuss50 avatar Oct 04 '25 12:10 modmuss50

Mixins utilizing Applet don't work with this PR. Such as one seen here: https://github.com/OrnitheMC/ornithe-standard-libraries/blob/main/libraries/entrypoints/entrypoints-client-mca1.0.6-mc12w30e/src/main/java/net/ornithemc/osl/entrypoints/impl/mixin/client/MinecraftAppletMixin.java

23:15:19.801 [AWT-EventQueue-0] ERROR FabricLoader/Mixin - osl.entrypoints.mixins.json:client.MinecraftAppletMixin from mod osl-entrypoints: Super class 'java.applet.Applet' of client.MinecraftAppletMixin was not found in the hierarchy of target class 'net/minecraft/client/MinecraftApplet'
org.spongepowered.asm.mixin.transformer.throwables.InvalidMixinException: Super class 'java.applet.Applet' of client.MinecraftAppletMixin was not found in the hierarchy of target class 'net/minecraft/client/MinecraftApplet'
	at org.spongepowered.asm.mixin.transformer.MixinInfo$SubType$Standard.validate(MixinInfo.java:593) ~[sponge-mixin-0.16.5+mixin.0.8.7.jar:0.16.5+mixin.0.8.7]
	at org.spongepowered.asm.mixin.transformer.MixinInfo$State.validate(MixinInfo.java:327) ~[sponge-mixin-0.16.5+mixin.0.8.7.jar:0.16.5+mixin.0.8.7]
	at org.spongepowered.asm.mixin.transformer.MixinInfo.validate(MixinInfo.java:913) ~[sponge-mixin-0.16.5+mixin.0.8.7.jar:0.16.5+mixin.0.8.7]
	at org.spongepowered.asm.mixin.transformer.MixinConfig.postInitialise(MixinConfig.java:884) ~[sponge-mixin-0.16.5+mixin.0.8.7.jar:0.16.5+mixin.0.8.7]
	at org.spongepowered.asm.mixin.transformer.MixinProcessor.prepareConfigs(MixinProcessor.java:616) ~[sponge-mixin-0.16.5+mixin.0.8.7.jar:0.16.5+mixin.0.8.7]
	at org.spongepowered.asm.mixin.transformer.MixinProcessor.select(MixinProcessor.java:510) ~[sponge-mixin-0.16.5+mixin.0.8.7.jar:0.16.5+mixin.0.8.7]
	at org.spongepowered.asm.mixin.transformer.MixinProcessor.checkSelect(MixinProcessor.java:486) ~[sponge-mixin-0.16.5+mixin.0.8.7.jar:0.16.5+mixin.0.8.7]
	at org.spongepowered.asm.mixin.transformer.MixinProcessor.lockAndSelect(MixinProcessor.java:438) ~[sponge-mixin-0.16.5+mixin.0.8.7.jar:0.16.5+mixin.0.8.7]
	at org.spongepowered.asm.mixin.transformer.MixinProcessor.couldTransformClass(MixinProcessor.java:398) ~[sponge-mixin-0.16.5+mixin.0.8.7.jar:0.16.5+mixin.0.8.7]
	at org.spongepowered.asm.mixin.transformer.MixinTransformer.couldTransformClass(MixinTransformer.java:265) ~[sponge-mixin-0.16.5+mixin.0.8.7.jar:0.16.5+mixin.0.8.7]
	at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:233) ~[sponge-mixin-0.16.5+mixin.0.8.7.jar:0.16.5+mixin.0.8.7]
	at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:202) ~[sponge-mixin-0.16.5+mixin.0.8.7.jar:0.16.5+mixin.0.8.7]
	at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:435) ~[fabric-loader-0.17.2+local.jar:?]
	at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:336) ~[fabric-loader-0.17.2+local.jar:?]
	at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:231) ~[fabric-loader-0.17.2+local.jar:?]
	at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:119) ~[fabric-loader-0.17.2+local.jar:?]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:490) ~[?:?]
	at net.fabricmc.loader.impl.game.minecraft.applet.AppletLauncher.<init>(AppletLauncher.java:67) ~[fabric-loader-0.17.2+local.jar:?]
	at net.fabricmc.loader.impl.game.minecraft.applet.AppletFrame.launch(AppletFrame.java:110) ~[fabric-loader-0.17.2+local.jar:?]
	at net.fabricmc.loader.impl.game.minecraft.applet.AppletMain.run(AppletMain.java:47) ~[fabric-loader-0.17.2+local.jar:?]
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:323) ~[?:?]
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723) ~[?:?]
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:702) ~[?:?]
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) ~[?:?]
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) ~[?:?]
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) ~[?:?]
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) ~[?:?]
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) ~[?:?]
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) ~[?:?]

Lassebq avatar Oct 17 '25 20:10 Lassebq

I don't think this is really fixable easily, for now it seems reasonable to require that the mod adapts to the new hierarchy instead. We chose to enable the applet transform for all JVM version to allow mods to migrate easily with a single code path.

Player3324 avatar Oct 17 '25 22:10 Player3324