ScalaPluginLoader icon indicating copy to clipboard operation
ScalaPluginLoader copied to clipboard

ScalaLoader not working with Paper 1.21.1 - 56

Open EpiCanard opened this issue 1 year ago • 1 comments

Hello

ScalaLoader doesn't load with Paper 1.21.1 - 56, I have the following error

[17:36:11] [Server thread/ERROR]: [ScalaLoader] Error initializing plugin 'ScalaLoader-0.18.13-SNAPSHOT.jar' in folder 'plugins' (Is it up to date?)
java.lang.NoSuchFieldError: Class xyz.janboerman.scalaloader.paper.plugin.ScalaPluginClassLoader does not have member field 'io.papermc.paper.plugin.provider.configuration.PaperPluginMeta configuration'
	at ScalaLoader-0.18.13-SNAPSHOT.jar/xyz.janboerman.scalaloader.paper.plugin.ScalaPluginClassLoader.transformBytecode(ScalaPluginClassLoader.java:239) ~[ScalaLoader-0.18.13-SNAPSHOT.jar:?]
	at ScalaLoader-0.18.13-SNAPSHOT.jar/xyz.janboerman.scalaloader.paper.plugin.ScalaPluginClassLoader.findClass(ScalaPluginClassLoader.java:190) ~[ScalaLoader-0.18.13-SNAPSHOT.jar:?]
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593) ~[?:?]
	at io.papermc.paper.plugin.entrypoint.classloader.PaperPluginClassLoader.loadClass(PaperPluginClassLoader.java:118) ~[paper-1.21.1.jar:1.21.1-56-227c94a]
	at io.papermc.paper.plugin.entrypoint.classloader.PaperPluginClassLoader.loadClass(PaperPluginClassLoader.java:107) ~[paper-1.21.1.jar:1.21.1-56-227c94a]
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[?:?]
	at java.base/java.lang.Class.forName0(Native Method) ~[?:?]
	at java.base/java.lang.Class.forName(Class.java:534) ~[?:?]
	at java.base/java.lang.Class.forName(Class.java:513) ~[?:?]
	at ScalaLoader-0.18.13-SNAPSHOT.jar/xyz.janboerman.scalaloader.paper.plugin.ScalaPluginBootstrap.createPlugin(ScalaPluginBootstrap.java:43) ~[ScalaLoader-0.18.13-SNAPSHOT.jar:?]
	at ScalaLoader-0.18.13-SNAPSHOT.jar/xyz.janboerman.scalaloader.paper.plugin.ScalaPluginBootstrap.createPlugin(ScalaPluginBootstrap.java:16) ~[ScalaLoader-0.18.13-SNAPSHOT.jar:?]
	at ScalaLoader-0.18.13-SNAPSHOT.jar/xyz.janboerman.scalaloader.paper.ScalaLoader.buildPlugin(ScalaLoader.java:578) ~[ScalaLoader-0.18.13-SNAPSHOT.jar:?]
	at ScalaLoader-0.18.13-SNAPSHOT.jar/xyz.janboerman.scalaloader.paper.ScalaLoader.loadScalaPlugins(ScalaLoader.java:328) ~[ScalaLoader-0.18.13-SNAPSHOT.jar:?]
	at ScalaLoader-0.18.13-SNAPSHOT.jar/xyz.janboerman.scalaloader.paper.ScalaLoader.loadScalaPlugins(ScalaLoader.java:203) ~[ScalaLoader-0.18.13-SNAPSHOT.jar:?]
	at ScalaLoader-0.18.13-SNAPSHOT.jar/xyz.janboerman.scalaloader.paper.ScalaLoader.onLoad(ScalaLoader.java:165) ~[ScalaLoader-0.18.13-SNAPSHOT.jar:?]
	at io.papermc.paper.plugin.storage.ServerPluginProviderStorage.processProvided(ServerPluginProviderStorage.java:59) ~[paper-1.21.1.jar:1.21.1-56-227c94a]
	at io.papermc.paper.plugin.storage.ServerPluginProviderStorage.processProvided(ServerPluginProviderStorage.java:18) ~[paper-1.21.1.jar:1.21.1-56-227c94a]
	at io.papermc.paper.plugin.storage.SimpleProviderStorage.enter(SimpleProviderStorage.java:39) ~[paper-1.21.1.jar:1.21.1-56-227c94a]
	at io.papermc.paper.plugin.entrypoint.LaunchEntryPointHandler.enter(LaunchEntryPointHandler.java:40) ~[paper-1.21.1.jar:1.21.1-56-227c94a]
	at org.bukkit.craftbukkit.CraftServer.loadPlugins(CraftServer.java:546) ~[paper-1.21.1.jar:1.21.1-56-227c94a]
	at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:292) ~[paper-1.21.1.jar:1.21.1-56-227c94a]
	at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1215) ~[paper-1.21.1.jar:1.21.1-56-227c94a]
	at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:330) ~[paper-1.21.1.jar:1.21.1-56-227c94a]
	at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]

Can you examine this bug ?

Thanks a lot

EpiCanard avatar Sep 02 '24 17:09 EpiCanard

Yes, I can. It'll have to wait for next monday.

Jannyboy11 avatar Sep 07 '24 15:09 Jannyboy11

I found the culprit: https://github.com/PaperMC/Paper/pull/10758/files#diff-1b48bde36fde990048ba454fb0bcc4e2b92a441c8387c350f1a8f0f09dbc8f8eR1127 so I hope to land a fix tonight.

Jannyboy11 avatar Sep 09 '24 17:09 Jannyboy11

I don't really understand how the PR change the behavior but it's good to know that you found the issue, good luck for your fix :)

EpiCanard avatar Sep 09 '24 21:09 EpiCanard

They made a bytecode-incompatible change. ScalaLoader uses this PluginMeta configuration field directly (actually, it used the PaperPluginMeta type); so in ScalaLoader's bytecode there is a getfield instruction which includes the name and type of that field. If the type is not exactly the same, it's considered a different field. I have found a workaround for this problem now: accessing the field using a getter method handle. I did run into some other issue to; bytecode transformations in CraftBukkit changed - ScalaLoader will have to adapt so that ScalaPlugins which use org.bukkit.Material will work properly again (one of my test plugins threw an assertion error because it found both modern and legacy materials).

Jannyboy11 avatar Sep 09 '24 22:09 Jannyboy11

https://github.com/Jannyboy11/ScalaPluginLoader/tree/fix/paper-1.21.1 contains the fixes, but still contains some debug statements. I will make a proper release tomorrow because I don't have any more time today.

Jannyboy11 avatar Sep 09 '24 22:09 Jannyboy11

https://www.spigotmc.org/resources/scalaloader.59568/update?update=561361

Jannyboy11 avatar Sep 10 '24 06:09 Jannyboy11

Thank you for the fix !

EpiCanard avatar Sep 10 '24 06:09 EpiCanard