Paper
Paper copied to clipboard
Unable to use non-legacy Random Number Generator Algorithms
Expected behavior
- Using an RNG Algorithm like
Xoroshiro128PlusPlusworks fine
RandomGenerator rng = RandomGenerator.of("Xoroshiro128PlusPlus");
Bukkit.getLogger().info("Number: " + rng.nextInt());
Observed/Actual behavior
- Using an RNG Algorithm like
Xoroshiro128PlusPlusdoes not work - Only the Legacy Algorithms like
RandomandSplittableRandomwork
Steps/models to reproduce
- Create Basic Plugin
- Run Server
- See Error
[08:56:32 ERROR]: Error occurred while enabling TestRandom v1.0-SNAPSHOT (Is it up to date?)
java.lang.IllegalArgumentException: No implementation of the random number generator algorithm "Xoroshiro128PlusPlus" is available
at java.util.random.RandomGeneratorFactory.findProvider(RandomGeneratorFactory.java:226) ~[?:?]
at java.util.random.RandomGeneratorFactory.of(RandomGeneratorFactory.java:254) ~[?:?]
at java.util.random.RandomGenerator.of(RandomGenerator.java:123) ~[?:?]
at org.test.testrandom.TestRandomPlugin.onEnable(TestRandomPlugin.java:12) ~[TestRandom-1.0-SNAPSHOT.jar:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:281) ~[paper-api-1.20.4-R0.1-SNAPSHOT.jar:?]
at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.enablePlugin(PaperPluginInstanceManager.java:190) ~[paper-1.20.4.jar:git-Paper-370]
at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.enablePlugin(PaperPluginManagerImpl.java:104) ~[paper-1.20.4.jar:git-Paper-370]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:507) ~[paper-api-1.20.4-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_20_R3.CraftServer.enablePlugin(CraftServer.java:637) ~[paper-1.20.4.jar:git-Paper-370]
at org.bukkit.craftbukkit.v1_20_R3.CraftServer.enablePlugins(CraftServer.java:548) ~[paper-1.20.4.jar:git-Paper-370]
at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:673) ~[paper-1.20.4.jar:git-Paper-370]
at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:433) ~[paper-1.20.4.jar:git-Paper-370]
at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:308) ~[paper-1.20.4.jar:git-Paper-370]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1132) ~[paper-1.20.4.jar:git-Paper-370]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:321) ~[paper-1.20.4.jar:git-Paper-370]
at java.lang.Thread.run(Thread.java:840) ~[?:?]
[08:56:32 INFO]: [TestRandom] Disabling TestRandom v1.0-SNAPSHOT
Plugin and Datapack List
- The Test Plugin
Paper version
This server is running Paper version git-Paper-370 (MC: 1.20.4) (Implementing API version 1.20.4-R0.1-SNAPSHOT) (Git: 1fa48d1)
Other
- Tested with OpenJDK 21, OpenJDK 17 and Temurin 17 on Arch Linux and Temurin 17 on Windows 11
- Works fine on Fabric and in a Console Program
- https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/random/package-summary.html#algorithms
if I had to guess, I would imagine that this is generally down to how the program is bootstrapped, i.e. plugins and MC itself are launched in their own classloader which doesn't inherit the app/system/whatever it's called now classloader
afaik this is only an issue when the server is ran through paperclip and not with the bundler jar, but at the same time craftbukkit's jar bootstrapping mechanism does not align with vanilla's (by using the app's CL) whereas paperclip's does (by using the app's parent CL)
I tried with both, jpenilla's run-server gradle plugin, and just java <...> -jar <downloaded paper jar>, both of those are/use paperclip then, i assume...
@emilyy-dev Tried bundler jar but no luck.
the bundler jar won't change anything, the bootstrappers do not pass in the full classloaders as those java APIs expect
@electronicboy Then why not?
Because that is how mojang designed it and how it's worked for years now afaik