8000
We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
8.7.2
1.16.5
Yes
Instantiate a WorldArgument in your onEnable() method and run this on a 1.16.5 server:
WorldArgument
onEnable()
new WorldArgument();
Fails due to WorldInfo class not existing
WorldInfo
[13:34:14 ERROR]: Error occurred while enabling CommandAPI v9.0.0-SNAPSHOT (Is it up to date?) java.lang.NoClassDefFoundError: org/bukkit/generator/WorldInfo at dev.jorel.commandapi.CommandAPIMain.onEnable(CommandAPIMain.java:136) ~[?:?] at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.16.5.jar:git-Paper-794] at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[patched_1.16.5.jar:git-Paper-794] at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:500) ~[patched_1.16.5.jar:git-Paper-794] at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:518) ~[patched_1.16.5.jar:git-Paper-794] at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:432) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.MinecraftServer.loadWorld(MinecraftServer.java:599) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:298) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1074) ~[patched_1.16.5.jar:git-Paper-794] at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-794] at java.lang.Thread.run(Thread.java:833) [?:?] Caused by: java.lang.ClassNotFoundException: org.bukkit.generator.WorldInfo at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:155) ~[patched_1.16.5.jar:git-Paper-794] at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:114) ~[patched_1.16.5.jar:git-Paper-794] at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?] ... 11 more
Loads normally
No response
This issue is caused by the method reference lambda in the WorldArgument constructor to convert a World to a String:
World
String
((Function<World, String>) World::getName).andThen(String::toLowerCase)
The generated source code:
SourceFile: "WorldArgument.java" Signature: #88 // Ldev/jorel/commandapi/arguments/SafeOverrideableArgument<Lorg/bukkit/World;Lorg/bukkit/World;>; BootstrapMethods: 0: #96 REF_invokeStatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; Method arguments: #98 (Ljava/lang/Object;)Ljava/lang/Object; #105 REF_invokeInterface org/bukkit/generator/WorldInfo.getName:()Ljava/lang/String; #107 (Lorg/bukkit/World;)Ljava/lang/String; 1: #96 REF_invokeStatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; Method arguments: #108 (Ljava/lang/Object;)Ljava/lang/Object; #114 REF_invokeVirtual java/lang/String.toLowerCase:()Ljava/lang/String; #116 (Ljava/lang/String;)Ljava/lang/String; InnerClasses: public static final #122= #118 of #120; // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
The generated source code of just using a lambda directly:
world -> world.getName().toLowerCase()
private static java.lang.String lambda$0(org.bukkit.World); descriptor: (Lorg/bukkit/World;)Ljava/lang/String; flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC Code: stack=1, locals=1, args_size=1 0: aload_0 1: invokeinterface #81, 1 // InterfaceMethod org/bukkit/World.getName:()Ljava/lang/String; 6: invokevirtual #85 // Method java/lang/String.toLowerCase:()Ljava/lang/String; 9: areturn LineNumberTable: line 42: 0 LocalVariableTable: Start Length Slot Name Signature 0 10 0 world Lorg/bukkit/World; } SourceFile: "WorldArgument.java" Signature: #94 // Ldev/jorel/commandapi/arguments/SafeOverrideableArgument<Lorg/bukkit/World;Lorg/bukkit/World;>; BootstrapMethods: 0: #102 REF_invokeStatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; Method arguments: #104 (Ljava/lang/Object;)Ljava/lang/Object; #107 REF_invokeStatic dev/jorel/commandapi/arguments/WorldArgument.lambda$0:(Lorg/bukkit/World;)Ljava/lang/String; #108 (Lorg/bukkit/World;)Ljava/lang/String; InnerClasses: public static final #114= #110 of #112; // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
As you can see, with the method reference it references the WorldInfo class which the World class extends in 1.19.2, but does not extend (or exist) in 1.16.5.