Package net.minecraftforge.fml.common
Class ObfuscationReflectionHelper
- java.lang.Object
-
- net.minecraftforge.fml.common.ObfuscationReflectionHelper
-
public class ObfuscationReflectionHelper extends java.lang.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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ObfuscationReflectionHelper.UnableToAccessFieldException
static class
ObfuscationReflectionHelper.UnableToFindFieldException
static class
ObfuscationReflectionHelper.UnableToFindMethodException
static class
ObfuscationReflectionHelper.UnknownConstructorException
-
Field Summary
Fields Modifier and Type Field Description private static org.apache.logging.log4j.Logger
LOGGER
private static org.apache.logging.log4j.Marker
REFLECTION
-
Constructor Summary
Constructors Constructor Description ObfuscationReflectionHelper()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static <T> java.lang.reflect.Constructor<T>
findConstructor(java.lang.Class<T> clazz, java.lang.Class<?>... parameterTypes)
Finds a constructor with the specified parameter types in the given class and makes it accessible.static <T> java.lang.reflect.Field
findField(java.lang.Class<? super T> clazz, java.lang.String fieldName)
Finds a field with the specified name in the given class and makes it accessible.static java.lang.reflect.Method
findMethod(java.lang.Class<?> clazz, java.lang.String methodName, java.lang.Class<?>... parameterTypes)
Finds a method with the specified name and parameters in the given class and makes it accessible.static <T,E>
TgetPrivateValue(java.lang.Class<? super E> classToAccess, E instance, java.lang.String fieldName)
Gets the value a field with the specified name in the given class.static java.lang.String
remapName(cpw.mods.modlauncher.api.INameMappingService.Domain domain, java.lang.String name)
Remaps a name using the SRG naming functionstatic <T,E>
voidsetPrivateValue(java.lang.Class<? super T> classToAccess, T instance, E value, java.lang.String fieldName)
Sets the value a field with the specified name in the given class.
-
-
-
Method Detail
-
remapName
@Nonnull public static java.lang.String remapName(cpw.mods.modlauncher.api.INameMappingService.Domain domain, java.lang.String name)
Remaps a name using the SRG naming function- Parameters:
domain
- TheINameMappingService.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(java.lang.Class<? super E> classToAccess, E instance, java.lang.String fieldName)
Gets the value a field with the specified name in the given class. Note: For performance, usefindField(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 theclassToAccess
.- Parameters:
classToAccess
- The class to find the field on.instance
- The instance of theclassToAccess
.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 java.lang.Class<? super T> classToAccess, @Nonnull T instance, @Nullable E value, @Nonnull java.lang.String fieldName)
Sets the value a field with the specified name in the given class. Note: For performance, usefindField(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 theclassToAccess
.- Parameters:
classToAccess
- The class to find the field on.instance
- The instance of theclassToAccess
.value
- The new value for the fieldfieldName
- The name of the field in theclassToAccess
.- 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 java.lang.reflect.Method findMethod(@Nonnull java.lang.Class<?> clazz, @Nonnull java.lang.String methodName, @Nonnull java.lang.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:
java.lang.NullPointerException
- Ifclazz
is null.java.lang.NullPointerException
- IfmethodName
is null.java.lang.IllegalArgumentException
- IfmethodName
is empty.java.lang.NullPointerException
- IfparameterTypes
is null.ObfuscationReflectionHelper.UnableToFindMethodException
- If the method could not be found.
-
findConstructor
@Nonnull public static <T> java.lang.reflect.Constructor<T> findConstructor(@Nonnull java.lang.Class<T> clazz, @Nonnull java.lang.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:
java.lang.NullPointerException
- Ifclazz
is null.java.lang.NullPointerException
- IfparameterTypes
is null.ObfuscationReflectionHelper.UnknownConstructorException
- If the constructor could not be found.
-
findField
@Nonnull public static <T> java.lang.reflect.Field findField(@Nonnull java.lang.Class<? super T> clazz, @Nonnull java.lang.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:
java.lang.NullPointerException
- Ifclazz
is null.java.lang.NullPointerException
- IffieldName
is null.java.lang.IllegalArgumentException
- IffieldName
is empty.ObfuscationReflectionHelper.UnableToFindFieldException
- If the field could not be found.
-
-