Interface IExtensibleEnum

All Known Implementing Classes:
BiomeSpecialEffects.GrassColorModifier, BlockPathTypes, EnchantmentCategory, FireworkRocketItem.Shape, HumanoidModel.ArmPose, ItemDisplayContext, MobCategory, Raid.RaiderType, Rarity, RecipeBookCategories, RecipeBookType, SpawnPlacements.Type

public interface IExtensibleEnum
To be implemented on vanilla enums that should be enhanced with ASM to be extensible. If this is implemented on a class, the class must define a static method called "create" which takes a String (enum name), and the rest of the parameters matching a constructor.

For example, an enum with the constructor MyEnum(Object foo) would require the method:

 public static MyEnum create(String name, Object foo)
 {
     throw new IllegalStateException("Enum not extended");
 }
 
The method contents will be replaced with ASM at runtime. Multiple create methods can be defined as long as each matches a constructor.
  • Method Details

    • init

      @Deprecated default void init()
      Deprecated.
      Called by generated factory code to do any post-constructor setup required by the enum. Should not be called manually.
    • createCodecForExtensibleEnum

      static <E extends Enum<E> & StringRepresentable> com.mojang.serialization.Codec<E> createCodecForExtensibleEnum(Supplier<E[]> valuesSupplier, Function<? super String,? extends E> enumValueFromNameFunction)
      Use this instead of StringRepresentable.fromEnum(Supplier) for extensible enums because this not cache the enum values on construction