ObfuscationUtilities.java
2.61 KB
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.mumfrey.liteloader.util;
import net.minecraft.launchwrapper.IClassTransformer;
import net.minecraft.launchwrapper.Launch;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.BlockPos;
import com.mumfrey.liteloader.core.runtime.Obf;
public class ObfuscationUtilities
{
/**
* True if FML is being used, in which case we use searge names instead of
* raw field/method names.
*/
private static boolean fmlDetected = false;
private static boolean checkedObfEnv = false;
private static boolean seargeNames = false;
static
{
// Check for FML
ObfuscationUtilities.fmlDetected = ObfuscationUtilities.fmlIsPresent();
}
public static boolean fmlIsPresent()
{
for (IClassTransformer transformer : Launch.classLoader.getTransformers())
{
if (transformer.getClass().getName().contains("fml"))
{
return true;
}
}
return false;
}
public static boolean useSeargeNames()
{
if (!ObfuscationUtilities.checkedObfEnv)
{
ObfuscationUtilities.checkedObfEnv = true;
try
{
MinecraftServer.class.getDeclaredField("serverRunning");
}
catch (SecurityException ex)
{
}
catch (NoSuchFieldException ex)
{
ObfuscationUtilities.seargeNames = true;
}
}
return ObfuscationUtilities.seargeNames;
}
/**
* Abstraction helper function
*
* @param fieldName Name of field to get, returned unmodified if in debug
* mode
* @return Obfuscated field name if present
*/
public static String getObfuscatedFieldName(String fieldName, String obfuscatedFieldName, String seargeFieldName)
{
boolean deobfuscated = BlockPos.class.getSimpleName().equals("BlockPos");
return deobfuscated ? (ObfuscationUtilities.useSeargeNames() ? seargeFieldName : fieldName)
: (ObfuscationUtilities.fmlDetected ? seargeFieldName : obfuscatedFieldName);
}
/**
* Abstraction helper function
*
* @param obf Field to get, returned unmodified if in debug mode
* @return Obfuscated field name if present
*/
public static String getObfuscatedFieldName(Obf obf)
{
boolean deobfuscated = BlockPos.class.getSimpleName().equals("BlockPos");
return deobfuscated ? (ObfuscationUtilities.useSeargeNames() ? obf.srg : obf.name) : (ObfuscationUtilities.fmlDetected ? obf.srg : obf.obf);
}
}