|
|
|
|
@ -20,38 +20,38 @@ public class LOTRMaterialTransformer implements IClassTransformer {
|
|
|
|
|
reader.accept(classNode, 0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
modifyMaterial2("ANGMAR", 480, 0.6F, classNode); //Original Durability = 350 | Add 162 | 1/4
|
|
|
|
|
modifyMaterial2("URUK", 662, 0.7F, classNode); //Original Durability = 550 | Add 112 | 1/4
|
|
|
|
|
modifyMaterial2("BLACK_URUK", 774, 0.7F, classNode); //Original Durability = 550 | Add 112 | 2/4
|
|
|
|
|
modifyMaterial2("HALF_TROLL", 475, 0.6F, classNode); //Original Durability = 300 | Add 175 | 1/4
|
|
|
|
|
modifyMaterial("ANGMAR", 480, 0.6F, classNode); //Original Durability = 350 | Add 162 | 1/4
|
|
|
|
|
modifyMaterial("URUK", 662, 0.7F, classNode); //Original Durability = 550 | Add 112 | 1/4
|
|
|
|
|
modifyMaterial("BLACK_URUK", 774, 0.7F, classNode); //Original Durability = 550 | Add 112 | 2/4
|
|
|
|
|
modifyMaterial("HALF_TROLL", 475, 0.6F, classNode); //Original Durability = 300 | Add 175 | 1/4
|
|
|
|
|
|
|
|
|
|
// Good Humans
|
|
|
|
|
modifyMaterial2("DALE", 475, 0.6F, classNode); //Original Durability = 300 | Add 175 | 1/4
|
|
|
|
|
modifyMaterial2("GONDOR", 725, 0.6F, classNode); //Original Durability = 450 | Add 137 | 2/4
|
|
|
|
|
modifyMaterial2("DORWINION_ELF", 875, 0.6F, classNode); //Original Durability = 500 | Add 125 | 2/4
|
|
|
|
|
modifyMaterial2("ROHAN", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
modifyMaterial2("TAUREDAIN", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
modifyMaterial2("DORWINION", 400, 0.6F, classNode); //Original Durability = 400 | Add 150 | 0/4
|
|
|
|
|
modifyMaterial2("LOSSARNACH", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
modifyMaterial2("LAMEDON", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
modifyMaterial("DALE", 475, 0.6F, classNode); //Original Durability = 300 | Add 175 | 1/4
|
|
|
|
|
modifyMaterial("GONDOR", 725, 0.6F, classNode); //Original Durability = 450 | Add 137 | 2/4
|
|
|
|
|
modifyMaterial("DORWINION_ELF", 875, 0.6F, classNode); //Original Durability = 500 | Add 125 | 2/4
|
|
|
|
|
modifyMaterial("ROHAN", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
modifyMaterial("TAUREDAIN", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
modifyMaterial("DORWINION", 400, 0.6F, classNode); //Original Durability = 400 | Add 150 | 0/4
|
|
|
|
|
modifyMaterial("LOSSARNACH", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
modifyMaterial("LAMEDON", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Evil Humans
|
|
|
|
|
modifyMaterial2("RHUN_GOLD", 558, 0.6F, classNode); //Original Durability = 450 | Add 137 | 1/4
|
|
|
|
|
modifyMaterial2("RHUN", 400, 0.6F, classNode); //Original Durability = 400 | Add 150 | 0/4
|
|
|
|
|
modifyMaterial2("DUNLENDING", 437, 0.6F, classNode); //Original Durability = 250 | Add 187 | 1/4
|
|
|
|
|
modifyMaterial2("NEAR_HARAD", 650, 0.6F, classNode); //Original Durability = 300 | Add 175 | 2/4
|
|
|
|
|
modifyMaterial2("HARNEDOR", 250, 0.6F, classNode); //Original Durability = 250 | Add 187 | 0/4
|
|
|
|
|
modifyMaterial2("CORSAIR", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
modifyMaterial2("GULF_HARAD", 350, 0.6F, classNode); //Original Durability = 350 | Add 162 | 0/4
|
|
|
|
|
modifyMaterial2("UMBAR", 450, 0.6F, classNode); //Original Durability = 450 | Add 137 | 0/4
|
|
|
|
|
modifyMaterial2("MOREDAIN", 250, 0.6F, classNode); //Original Durability = 250 | Add 187 | 0/4
|
|
|
|
|
modifyMaterial("RHUN_GOLD", 558, 0.6F, classNode); //Original Durability = 450 | Add 137 | 1/4
|
|
|
|
|
modifyMaterial("RHUN", 400, 0.6F, classNode); //Original Durability = 400 | Add 150 | 0/4
|
|
|
|
|
modifyMaterial("DUNLENDING", 437, 0.6F, classNode); //Original Durability = 250 | Add 187 | 1/4
|
|
|
|
|
modifyMaterial("NEAR_HARAD", 650, 0.6F, classNode); //Original Durability = 300 | Add 175 | 2/4
|
|
|
|
|
modifyMaterial("HARNEDOR", 250, 0.6F, classNode); //Original Durability = 250 | Add 187 | 0/4
|
|
|
|
|
modifyMaterial("CORSAIR", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
modifyMaterial("GULF_HARAD", 350, 0.6F, classNode); //Original Durability = 350 | Add 162 | 0/4
|
|
|
|
|
modifyMaterial("UMBAR", 450, 0.6F, classNode); //Original Durability = 450 | Add 137 | 0/4
|
|
|
|
|
modifyMaterial("MOREDAIN", 250, 0.6F, classNode); //Original Durability = 250 | Add 187 | 0/4
|
|
|
|
|
|
|
|
|
|
//Elves
|
|
|
|
|
modifyMaterial2("WOOD_ELVEN", 1000, 0.6F, classNode); //Original Durability = 500 | Add 125 | 4/4
|
|
|
|
|
modifyMaterial("WOOD_ELVEN", 1000, 0.6F, classNode); //Original Durability = 500 | Add 125 | 4/4
|
|
|
|
|
|
|
|
|
|
// Custom
|
|
|
|
|
modifyMaterial2("UTUMNO", 1500, 0.7F, classNode); //Original Durability = 250 | Add 187 | 0/4
|
|
|
|
|
modifyMaterial("UTUMNO", 1500, 0.7F, classNode); //Original Durability = 250 | Add 187 | 0/4
|
|
|
|
|
|
|
|
|
|
addMaterial("RED_DWARF", classNode);
|
|
|
|
|
addMaterial("WIZARD", classNode);
|
|
|
|
|
@ -87,18 +87,22 @@ public class LOTRMaterialTransformer implements IClassTransformer {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void modifyMaterial2(String fieldName, int durability, float protection, ClassNode classNode) {
|
|
|
|
|
System.out.println("[CinderLoE] Attempting to modify " + fieldName);
|
|
|
|
|
|
|
|
|
|
MethodNode clinit = null;
|
|
|
|
|
boolean foundField = false;
|
|
|
|
|
|
|
|
|
|
// First, find the <clinit> method
|
|
|
|
|
for (MethodNode method : classNode.methods) {
|
|
|
|
|
if (method.name.equals("<clinit>")) {
|
|
|
|
|
System.out.println("[CinderLoE] Found clinit");
|
|
|
|
|
clinit = method;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (clinit == null) {
|
|
|
|
|
System.out.println("[CinderLoE] clinit not found");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -107,6 +111,11 @@ public class LOTRMaterialTransformer implements IClassTransformer {
|
|
|
|
|
while (iter.hasNext()) {
|
|
|
|
|
AbstractInsnNode insn = iter.next();
|
|
|
|
|
|
|
|
|
|
if (insn instanceof LdcInsnNode) {
|
|
|
|
|
System.out.println("[CinderLoE] Reading node " + ((LdcInsnNode) insn).cst);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (insn instanceof LdcInsnNode && ((LdcInsnNode) insn).cst.equals(fieldName)) {
|
|
|
|
|
foundField = true;
|
|
|
|
|
}
|
|
|
|
|
@ -115,7 +124,7 @@ public class LOTRMaterialTransformer implements IClassTransformer {
|
|
|
|
|
if (foundField && insn instanceof MethodInsnNode && ((MethodInsnNode) insn).name.equals("setProtection")) {
|
|
|
|
|
AbstractInsnNode protectionInsn = insn.getPrevious();
|
|
|
|
|
|
|
|
|
|
if (protectionInsn instanceof IntInsnNode) {
|
|
|
|
|
if (protectionInsn instanceof LdcInsnNode) {
|
|
|
|
|
((LdcInsnNode) protectionInsn).cst = protection;
|
|
|
|
|
System.out.println("[CinderLoE] Updated protection for " + fieldName + " to " + protection);
|
|
|
|
|
return;
|
|
|
|
|
@ -133,6 +142,8 @@ public class LOTRMaterialTransformer implements IClassTransformer {
|
|
|
|
|
public void modifyMaterial(String fieldName, int durability, ClassNode classNode) {
|
|
|
|
|
MethodNode clinit = null;
|
|
|
|
|
boolean foundField = false;
|
|
|
|
|
boolean durabilityModified = false;
|
|
|
|
|
boolean protectionModified = false;
|
|
|
|
|
|
|
|
|
|
// First, find the <clinit> method
|
|
|
|
|
for (MethodNode method : classNode.methods) {
|
|
|
|
|
@ -156,17 +167,29 @@ public class LOTRMaterialTransformer implements IClassTransformer {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (foundField && insn instanceof MethodInsnNode && ((MethodInsnNode) insn).name.equals("setUses")) {
|
|
|
|
|
if (foundField && !durabilityModified && insn instanceof MethodInsnNode && ((MethodInsnNode) insn).name.equals("setUses")) {
|
|
|
|
|
AbstractInsnNode durabilityInsn = insn.getPrevious();
|
|
|
|
|
|
|
|
|
|
if (durabilityInsn instanceof IntInsnNode) {
|
|
|
|
|
((IntInsnNode) durabilityInsn).operand = durability;
|
|
|
|
|
System.out.println("[CinderLoE] Updated durability for " + fieldName + " to " + durability);
|
|
|
|
|
return;
|
|
|
|
|
durabilityModified = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (foundField && !protectionModified && insn instanceof MethodInsnNode && ((MethodInsnNode) insn).name.equals("setProtection")) {
|
|
|
|
|
AbstractInsnNode protectionInsn = insn.getPrevious();
|
|
|
|
|
|
|
|
|
|
if (protectionInsn instanceof LdcInsnNode) {
|
|
|
|
|
((LdcInsnNode) protectionInsn).cst = protection;
|
|
|
|
|
System.out.println("[CinderLoE] Updated protection for " + fieldName + " to " + protection);
|
|
|
|
|
protectionModified = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (durabilityModified && protectionModified) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!foundField) {
|
|
|
|
|
|