-
Notifications
You must be signed in to change notification settings - Fork 16
/
KeyReflectionHelper.java
35 lines (29 loc) · 1.31 KB
/
KeyReflectionHelper.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package dmillerw.menu.helper;
import dmillerw.menu.handler.LogHandler;
import net.minecraft.client.settings.KeyBinding;
import net.minecraftforge.fml.relauncher.FMLLaunchHandler;
import java.lang.reflect.Field;
public class KeyReflectionHelper {
private static Field pressTimeField;
public static void gatherFields() {
try {
pressTimeField = KeyBinding.class.getDeclaredField(FMLLaunchHandler.isDeobfuscatedEnvironment() ? "pressTime" : "field_151474_i");
pressTimeField.setAccessible(true);
} catch (NoSuchFieldException e) {
throwReflectionError("pressTime", KeyBinding.class);
}
}
public static void setPressTime(KeyBinding keyBinding, int pressTime) {
try {
pressTimeField.set(keyBinding, pressTime == 0 ? 0 : pressTimeField.getInt(keyBinding) + pressTime);
} catch (IllegalAccessException e) {
e.printStackTrace();
throwReflectionError("pressTime", KeyBinding.class);
}
}
private static void throwReflectionError(String field, Class<?> clazz) {
String error = String.format("Ran into an issue regarding reflection with field %s from %s. REPORT THIS TO THE MOD AUTHOR!", field, clazz.getName());
LogHandler.fatal(error);
throw new RuntimeException(error);
}
}