A load of transformer accesses- also a few tweaks to the transformer, and linux support in the fml python
This commit is contained in:
parent
4fb08f1660
commit
5f51e63385
|
@ -1,2 +1,168 @@
|
|||
#Blank FML Access Transformer
|
||||
public ajh.a(Ljava/lang/Class;Ljava/lang/String;)V
|
||||
#Main FML Access Transformer configuration file
|
||||
# TileEntity addMapping
|
||||
public ajh.a(Ljava/lang/Class;Ljava/lang/String;)V
|
||||
# EntityList addMappings
|
||||
public jq.a(Ljava/lang/Class;Ljava/lang/String;I)V
|
||||
public jq.a(Ljava/lang/Class;Ljava/lang/String;III)V
|
||||
# EntityList nameToClassMap
|
||||
public jq.b
|
||||
# RenderManager renderers
|
||||
public avx.o
|
||||
# RenderBlocks - everything
|
||||
public avf.A
|
||||
public avf.B
|
||||
public avf.C
|
||||
public avf.D
|
||||
public avf.E
|
||||
public avf.F
|
||||
public avf.G
|
||||
public avf.H
|
||||
public avf.I
|
||||
public avf.J
|
||||
public avf.K
|
||||
public avf.L
|
||||
public avf.M
|
||||
public avf.N
|
||||
public avf.S
|
||||
public avf.T
|
||||
public avf.U
|
||||
public avf.V
|
||||
public avf.W
|
||||
public avf.X
|
||||
public avf.Y
|
||||
public avf.Z
|
||||
public avf.a
|
||||
public avf.aA
|
||||
public avf.aB
|
||||
public avf.aC
|
||||
public avf.aD
|
||||
public avf.aE
|
||||
public avf.aF
|
||||
public avf.aG
|
||||
public avf.aH
|
||||
public avf.aI
|
||||
public avf.aJ
|
||||
public avf.aK
|
||||
public avf.aL
|
||||
public avf.aM
|
||||
public avf.aN
|
||||
public avf.aO
|
||||
public avf.aa
|
||||
public avf.ab
|
||||
public avf.ac
|
||||
public avf.ad
|
||||
public avf.ae
|
||||
public avf.af
|
||||
public avf.ag
|
||||
public avf.ah
|
||||
public avf.ai
|
||||
public avf.aj
|
||||
public avf.ak
|
||||
public avf.al
|
||||
public avf.am
|
||||
public avf.an
|
||||
public avf.ao
|
||||
public avf.ap
|
||||
public avf.aq
|
||||
public avf.ar
|
||||
public avf.as
|
||||
public avf.at
|
||||
public avf.au
|
||||
public avf.av
|
||||
public avf.aw
|
||||
public avf.ax
|
||||
public avf.ay
|
||||
public avf.az
|
||||
public avf.b
|
||||
public avf.c
|
||||
public avf.d
|
||||
public avf.e
|
||||
public avf.f
|
||||
public avf.g
|
||||
public avf.h
|
||||
public avf.i
|
||||
public avf.j
|
||||
public avf.k
|
||||
public avf.l
|
||||
public avf.m
|
||||
public avf.n
|
||||
public avf.o
|
||||
public avf.p
|
||||
public avf.q
|
||||
public avf.r
|
||||
public avf.s
|
||||
public avf.t
|
||||
public avf.u
|
||||
public avf.v
|
||||
public avf.w
|
||||
public avf.x
|
||||
public avf.y
|
||||
public avf.z
|
||||
public avf.a()V
|
||||
public avf.a(DDDDDDFD)V
|
||||
public avf.a(IIII)I
|
||||
public avf.a(IIILacn;)F
|
||||
public avf.a(Laex;III)Z
|
||||
public avf.a(Lafc;III)Z
|
||||
public avf.a(Lafg;III)Z
|
||||
public avf.a(Lafq;III)Z
|
||||
public avf.a(Lafv;III)Z
|
||||
public avf.a(Lafw;III)Z
|
||||
public avf.a(Lahg;III)Z
|
||||
public avf.a(Laie;III)Z
|
||||
public avf.a(Laif;DDDDD)V
|
||||
public avf.a(Laif;DDDI)V
|
||||
public avf.a(Laif;IDDD)V
|
||||
public avf.a(Laif;IDDDD)V
|
||||
public avf.a(Laif;IF)V
|
||||
public avf.a(Laif;IIDDDD)V
|
||||
public avf.a(Laif;III)V
|
||||
public avf.a(Laif;IIIFFF)Z
|
||||
public avf.a(Laif;IIII)V
|
||||
public avf.a(Laif;IIIZ)V
|
||||
public avf.a(Laif;Luo;IIII)V
|
||||
public avf.b(DDDDDDFD)V
|
||||
public avf.b(I)Z
|
||||
public avf.b(Laif;DDDI)V
|
||||
public avf.b(Laif;IDDD)V
|
||||
public avf.b(Laif;III)Z
|
||||
public avf.b(Laif;IIIZ)Z
|
||||
public avf.c(DDDDDDFD)V
|
||||
public avf.c(Laif;DDDI)V
|
||||
public avf.c(Laif;III)Z
|
||||
public avf.c(Laif;IIIFFF)Z
|
||||
public avf.c(Laif;IIIZ)Z
|
||||
public avf.d(Laif;DDDI)V
|
||||
public avf.d(Laif;III)V
|
||||
public avf.d(Laif;IIIFFF)Z
|
||||
public avf.e(Laif;DDDI)V
|
||||
public avf.e(Laif;III)Z
|
||||
public avf.f(Laif;DDDI)V
|
||||
public avf.f(Laif;III)Z
|
||||
public avf.g(Laif;III)Z
|
||||
public avf.h(Laif;III)Z
|
||||
public avf.i(Laif;III)Z
|
||||
public avf.j(Laif;III)Z
|
||||
public avf.k(Laif;III)Z
|
||||
public avf.l(Laif;III)Z
|
||||
public avf.m(Laif;III)Z
|
||||
public avf.n(Laif;III)Z
|
||||
public avf.o(Laif;III)Z
|
||||
public avf.p(Laif;III)Z
|
||||
public avf.q(Laif;III)Z
|
||||
public avf.r(Laif;III)Z
|
||||
public avf.s(Laif;III)Z
|
||||
public avf.t(Laif;III)Z
|
||||
public avf.u(Laif;III)Z
|
||||
public avf.v(Laif;III)Z
|
||||
public avf.w(Laif;III)Z
|
||||
public avf.x(Laif;III)Z
|
||||
#RenderEngine - make TextureFX list public
|
||||
public ave.h
|
||||
#RenderPlayer - make armorlist public and not final
|
||||
public-f awq.j
|
||||
#StringTranslate - make the current table public
|
||||
public ak.b
|
||||
# TileEntityRenderer - make the list of renderers public
|
||||
public axr.m
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="src-common"/>
|
||||
<classpathentry kind="src" path="client"/>
|
||||
<classpathentry kind="src" path="transformers"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
||||
<classpathentry exported="true" kind="lib" path="jars/bin/jinput.jar">
|
||||
<attributes>
|
||||
|
|
|
@ -50,6 +50,11 @@
|
|||
<type>2</type>
|
||||
<locationURI>MCP_LOC/src-work/common</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>transformers</name>
|
||||
<type>2</type>
|
||||
<locationURI>MCP_LOC/FML/transformers</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>common/fmlversion.properties</name>
|
||||
<type>1</type>
|
||||
|
|
|
@ -146,19 +146,20 @@ def setup_fml(fml_dir, mcp_dir):
|
|||
|
||||
def applyrg_shunt(self, side, reobf=False, applyrg_real = Commands.applyrg):
|
||||
jars = {CLIENT: self.jarclient, SERVER: self.jarserver}
|
||||
#print "==================================SHUNT %s============================" % side
|
||||
#print "Java: %s" % self.cmdjava
|
||||
#print "Javac: %s" % self.cmdjavac
|
||||
#print "Jar: %s" % jars[side]
|
||||
print "==================================SHUNT %s============================" % side
|
||||
print "Java: %s" % self.cmdjava
|
||||
print "Javac: %s" % self.cmdjavac
|
||||
print "Jar: %s" % jars[side]
|
||||
|
||||
binDir = os.path.join(fml_dir, 'bin')
|
||||
if not os.path.isdir(binDir):
|
||||
os.makedirs(binDir)
|
||||
|
||||
#Compile AccessTransformer
|
||||
forkcmd = ('%s -Xlint:-options -deprecation -g -source 1.6 -target 1.6 -classpath "{classpath};." -sourcepath {sourcepath} -d {outpath} {target}' % self.cmdjavac).format(
|
||||
forkcmd = ('%s -Xlint:-options -deprecation -g -source 1.6 -target 1.6 -classpath "{classpath}" -sourcepath {sourcepath} -d {outpath} {target}' % self.cmdjavac).format(
|
||||
classpath=os.path.join(mcp_dir, 'lib', '*'), sourcepath=os.path.join(fml_dir, 'common'), outpath=os.path.join(fml_dir, 'bin'),
|
||||
target=os.path.join(fml_dir, 'transformers', 'cpw', 'mods', 'fml', 'common', 'asm', 'transformers', 'AccessTransformer.java'))
|
||||
print forkcmd
|
||||
self.runcmd(forkcmd)
|
||||
|
||||
#Run AccessTransformer
|
||||
|
@ -427,4 +428,4 @@ def merge_tree(root_src_dir, root_dst_dir):
|
|||
dst_file = os.path.join(dst_dir, file_)
|
||||
if os.path.exists(dst_file):
|
||||
os.remove(dst_file)
|
||||
shutil.copy(src_file, dst_dir)
|
||||
shutil.copy(src_file, dst_dir)
|
||||
|
|
|
@ -3,6 +3,7 @@ package cpw.mods.fml.common.asm.transformers;
|
|||
import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
|
||||
import static org.objectweb.asm.Opcodes.ACC_PROTECTED;
|
||||
import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
|
||||
import static org.objectweb.asm.Opcodes.ACC_FINAL;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedOutputStream;
|
||||
|
@ -55,12 +56,25 @@ public class AccessTransformer implements IClassTransformer
|
|||
public int oldAccess = 0;
|
||||
public int newAccess = 0;
|
||||
public int targetAccess = 0;
|
||||
public boolean changeFinal = false;
|
||||
public boolean markFinal = false;
|
||||
|
||||
private void setTargetAccess(String name)
|
||||
{
|
||||
if (name.equalsIgnoreCase("public")) targetAccess = ACC_PUBLIC;
|
||||
else if (name.equalsIgnoreCase("private")) targetAccess = ACC_PRIVATE;
|
||||
else if (name.equalsIgnoreCase("protected")) targetAccess = ACC_PROTECTED;
|
||||
if (name.startsWith("public")) targetAccess = ACC_PUBLIC;
|
||||
else if (name.startsWith("private")) targetAccess = ACC_PRIVATE;
|
||||
else if (name.startsWith("protected")) targetAccess = ACC_PROTECTED;
|
||||
|
||||
if (name.endsWith("-f"))
|
||||
{
|
||||
changeFinal = true;
|
||||
markFinal = false;
|
||||
}
|
||||
else if (name.endsWith("+f"))
|
||||
{
|
||||
changeFinal = true;
|
||||
markFinal = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -68,7 +82,7 @@ public class AccessTransformer implements IClassTransformer
|
|||
|
||||
public AccessTransformer() throws IOException
|
||||
{
|
||||
this("/rules.csv");
|
||||
this("fml_at.cfg");
|
||||
}
|
||||
protected AccessTransformer(String rulesFile) throws IOException
|
||||
{
|
||||
|
@ -111,12 +125,17 @@ public class AccessTransformer implements IClassTransformer
|
|||
Modifier m = new Modifier();
|
||||
m.setTargetAccess(parts.get(0));
|
||||
List<String> descriptor = Lists.newArrayList(Splitter.on(".").trimResults().split(parts.get(1)));
|
||||
List<String> method = Lists.newArrayList(Splitter.on(CharMatcher.anyOf("()")).omitEmptyStrings().trimResults().split(descriptor.get(1)));
|
||||
if (method.size()==3) //cpw, cleanthis up plz
|
||||
String nameReference = descriptor.get(1);
|
||||
int parenIdx = nameReference.indexOf('(');
|
||||
if (parenIdx>0)
|
||||
{
|
||||
m.desc = String.format("(%s)%s", method.get(1), method.get(2));
|
||||
m.desc = nameReference.substring(parenIdx);
|
||||
m.name = nameReference.substring(0,parenIdx-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
m.name = nameReference;
|
||||
}
|
||||
m.name = method.get(0);
|
||||
modifiers.put(descriptor.get(0), m);
|
||||
return true;
|
||||
}
|
||||
|
@ -196,6 +215,19 @@ public class AccessTransformer implements IClassTransformer
|
|||
default:
|
||||
throw new RuntimeException("The fuck?");
|
||||
}
|
||||
|
||||
// Clear the "final" marker on fields only if specified in control field
|
||||
if (target.changeFinal && target.desc == "")
|
||||
{
|
||||
if (target.markFinal)
|
||||
{
|
||||
ret |= ACC_FINAL;
|
||||
}
|
||||
else
|
||||
{
|
||||
ret &= ~ACC_FINAL;
|
||||
}
|
||||
}
|
||||
target.newAccess = ret;
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue