Skip to content

Registroid generated property getters have invalid bytecode for DeferredRegistry #11

@PaintNinja

Description

@PaintNinja

Consider the following:

@CompileStatic
final class NoteItems extends AbstractItems {
    @Registroid(registerAutomatically = false)
    @PackageScope static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, NinjasCash.MOD_ID)

    static final Item FIVE_NOTE = newBasicItem()
}

The generated bytecode for FIVE_NOTE attempts to treat ITEMS as a CGL RegistryObject rather than a Forge one and fails at runtime as a result:

  // access flags 0x18
  // signature Lnet/minecraftforge/registries/DeferredRegister<Lnet/minecraft/world/item/Item;>;
  // declaration: ITEMS extends net.minecraftforge.registries.DeferredRegister<net.minecraft.world.item.Item>
  final static Lnet/minecraftforge/registries/DeferredRegister; ITEMS

  // access flags 0x1A
  // signature Lnet/minecraftforge/registries/RegistryObject<Lnet/minecraft/world/item/Item;>;
  // declaration: $registryObjectForFIVE_NOTE extends net.minecraftforge.registries.RegistryObject<net.minecraft.world.item.Item>
  private final static Lnet/minecraftforge/registries/RegistryObject; $registryObjectForFIVE_NOTE
  @Lgroovy/transform/Generated;()

  // access flags 0x9
  public static getFIVE_NOTE()Lnet/minecraft/world/item/Item;
  @Lgroovy/transform/Generated;()
    GETSTATIC ga/ozli/minecraftmods/ninjascash/NoteItems.$registryObjectForFIVE_NOTE : Lorg/groovymc/cgl/reg/RegistryObject;
    INVOKEVIRTUAL org/groovymc/cgl/reg/RegistryObject.get ()Ljava/lang/Object;
    CHECKCAST net/minecraft/world/item/Item
    ARETURN
    MAXSTACK = 1
    MAXLOCALS = 0

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