Class ObfuscationReflectionHelper

java.lang.Object
net.minecraftforge.fml.common.ObfuscationReflectionHelper

public class ObfuscationReflectionHelper extends Object
Some reflection helper code. This may not work properly in Java 9 with its new, more restrictive, reflection management. As such, if issues are encountered, please report them and we can see what we can do to expand the compatibility. In other cases, AccessTransformers may be used. All field and method names should be passed in as SRG names, and this will automatically resolve if MCP mappings are detected.
  • Field Details

    • LOGGER

      private static final org.apache.logging.log4j.Logger LOGGER
    • REFLECTION

      private static final org.apache.logging.log4j.Marker REFLECTION
  • Constructor Details

    • ObfuscationReflectionHelper

      public ObfuscationReflectionHelper()
  • Method Details

    • remapName

      @Nonnull public static String remapName(cpw.mods.modlauncher.api.INameMappingService.Domain domain, String name)
      Remaps a name using the SRG naming function
      Parameters:
      domain - The INameMappingService.Domain to use to remap the name.
      name - The name to try and remap.
      Returns:
      The remapped name, or the original name if it couldn't be remapped.
    • getPrivateValue

      @Nullable public static <T, E> T getPrivateValue(Class<? super E> classToAccess, E instance, String fieldName)
      Gets the value a field with the specified name in the given class. Note: For performance, use findField(Class, String) if you are getting the value more than once.

      Throws an exception if the field is not found or the value of the field cannot be gotten.

      Type Parameters:
      T - The type of the value.
      E - The type of the classToAccess.
      Parameters:
      classToAccess - The class to find the field on.
      instance - The instance of the classToAccess.
      fieldName - The SRG (unmapped) name of the field to find (e.g. "field_181725_a").
      Returns:
      The value of the field with the specified name in the classToAccess.
      Throws:
      ObfuscationReflectionHelper.UnableToAccessFieldException - If there was a problem getting the field.
      ObfuscationReflectionHelper.UnableToAccessFieldException - If there was a problem getting the value.
    • setPrivateValue

      public static <T, E> void setPrivateValue(@Nonnull Class<? super T> classToAccess, @Nonnull T instance, @Nullable E value, @Nonnull String fieldName)
      Sets the value a field with the specified name in the given class. Note: For performance, use findField(Class, String) if you are setting the value more than once.

      Throws an exception if the field is not found or the value of the field cannot be set.

      Type Parameters:
      T - The type of the value.
      E - The type of the classToAccess.
      Parameters:
      classToAccess - The class to find the field on.
      instance - The instance of the classToAccess.
      value - The new value for the field
      fieldName - The name of the field in the classToAccess.
      Throws:
      ObfuscationReflectionHelper.UnableToFindFieldException - If there was a problem getting the field.
      ObfuscationReflectionHelper.UnableToAccessFieldException - If there was a problem setting the value of the field.
    • findMethod

      @Nonnull public static Method findMethod(@Nonnull Class<?> clazz, @Nonnull String methodName, @Nonnull Class<?>... parameterTypes)
      Finds a method with the specified name and parameters in the given class and makes it accessible. Note: For performance, store the returned value and avoid calling this repeatedly.

      Throws an exception if the method is not found.

      Parameters:
      clazz - The class to find the method on.
      methodName - The SRG (unmapped) name of the method to find (e.g. "func_12820_D").
      parameterTypes - The parameter types of the method to find.
      Returns:
      The method with the specified name and parameters in the given class.
      Throws:
      NullPointerException - If clazz is null.
      NullPointerException - If methodName is null.
      IllegalArgumentException - If methodName is empty.
      NullPointerException - If parameterTypes is null.
      ObfuscationReflectionHelper.UnableToFindMethodException - If the method could not be found.
    • findConstructor

      @Nonnull public static <T> Constructor<T> findConstructor(@Nonnull Class<T> clazz, @Nonnull Class<?>... parameterTypes)
      Finds a constructor with the specified parameter types in the given class and makes it accessible. Note: For performance, store the returned value and avoid calling this repeatedly.

      Throws an exception if the constructor is not found.

      Type Parameters:
      T - The type.
      Parameters:
      clazz - The class to find the constructor in.
      parameterTypes - The parameter types of the constructor.
      Returns:
      The constructor with the specified parameters in the given class.
      Throws:
      NullPointerException - If clazz is null.
      NullPointerException - If parameterTypes is null.
      ObfuscationReflectionHelper.UnknownConstructorException - If the constructor could not be found.
    • findField

      @Nonnull public static <T> Field findField(@Nonnull Class<? super T> clazz, @Nonnull String fieldName)
      Finds a field with the specified name in the given class and makes it accessible. Note: For performance, store the returned value and avoid calling this repeatedly.

      Throws an exception if the field is not found.

      Type Parameters:
      T - The type.
      Parameters:
      clazz - The class to find the field on.
      fieldName - The SRG (unmapped) name of the field to find (e.g. "field_181725_a").
      Returns:
      The constructor with the specified parameters in the given class.
      Throws:
      NullPointerException - If clazz is null.
      NullPointerException - If fieldName is null.
      IllegalArgumentException - If fieldName is empty.
      ObfuscationReflectionHelper.UnableToFindFieldException - If the field could not be found.