8000 WorldArgument fails java.lang.NoClassDefFoundError: org/bukkit/generator/WorldInfo in Minecraft 1.16.5 · Issue #397 · CommandAPI/CommandAPI · GitHub
[go: up one dir, main page]

Skip to content
WorldArgument fails java.lang.NoClassDefFoundError: org/bukkit/generator/WorldInfo in Minecraft 1.16.5 #397
Closed
@JorelAli

Description

@JorelAli

CommandAPI version

8.7.2

Minecraft version

1.16.5

Are you shading the CommandAPI?

Yes

What I did

Instantiate a WorldArgument in your onEnable() method and run this on a 1.16.5 server:

new WorldArgument();

What actually happened

Fails due to WorldInfo class not existing

[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

What should have happened

Loads normally

Server logs and CommandAPI config

No response

Other

This issue is caused by the method reference lambda in the WorldArgument constructor to convert a World to a 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      2938
      0