|
|
|
|
@ -5,14 +5,7 @@ import net.minecraft.launchwrapper.IClassTransformer;
|
|
|
|
|
import org.objectweb.asm.ClassReader;
|
|
|
|
|
import org.objectweb.asm.ClassWriter;
|
|
|
|
|
import org.objectweb.asm.Opcodes;
|
|
|
|
|
import org.objectweb.asm.tree.ClassNode;
|
|
|
|
|
import org.objectweb.asm.tree.FieldNode;
|
|
|
|
|
import org.objectweb.asm.tree.MethodNode;
|
|
|
|
|
import org.objectweb.asm.tree.IntInsnNode;
|
|
|
|
|
import org.objectweb.asm.tree.FieldInsnNode;
|
|
|
|
|
import org.objectweb.asm.tree.MethodInsnNode;
|
|
|
|
|
import org.objectweb.asm.tree.LdcInsnNode;
|
|
|
|
|
import org.objectweb.asm.tree.AbstractInsnNode;
|
|
|
|
|
import org.objectweb.asm.tree.*;
|
|
|
|
|
|
|
|
|
|
import java.util.Iterator;
|
|
|
|
|
|
|
|
|
|
@ -27,36 +20,38 @@ public class LOTRMaterialTransformer implements IClassTransformer {
|
|
|
|
|
reader.accept(classNode, 0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setDurability("ANGMAR", 480, classNode); //Original Durability = 350 | Add 162 | 1/4
|
|
|
|
|
setDurability("URUK", 662, classNode); //Original Durability = 550 | Add 112 | 1/4
|
|
|
|
|
setDurability("BLACK_URUK", 774, classNode); //Original Durability = 550 | Add 112 | 2/4
|
|
|
|
|
setDurability("HALF_TROLL", 475, classNode); //Original Durability = 300 | Add 175 | 1/4
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
// Good Humans
|
|
|
|
|
setDurability("DALE", 475, classNode); //Original Durability = 300 | Add 175 | 1/4
|
|
|
|
|
setDurability("GONDOR", 725, classNode); //Original Durability = 450 | Add 137 | 2/4
|
|
|
|
|
setDurability("DORWINION_ELF", 875, classNode); //Original Durability = 500 | Add 125 | 2/4
|
|
|
|
|
setDurability("ROHAN", 300, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
setDurability("TAUREDAIN", 300, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
setDurability("DORWINION", 400, classNode); //Original Durability = 400 | Add 150 | 0/4
|
|
|
|
|
setDurability("LOSSARNACH", 300, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
setDurability("LAMEDON", 300, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Evil Humans
|
|
|
|
|
setDurability("RHUN_GOLD", 558, classNode); //Original Durability = 450 | Add 137 | 1/4
|
|
|
|
|
setDurability("RHUN", 400, classNode); //Original Durability = 400 | Add 150 | 0/4
|
|
|
|
|
setDurability("DUNLENDING", 437, classNode); //Original Durability = 250 | Add 187 | 1/4
|
|
|
|
|
setDurability("NEAR_HARAD", 650, classNode); //Original Durability = 300 | Add 175 | 2/4
|
|
|
|
|
setDurability("HARNEDOR", 250, classNode); //Original Durability = 250 | Add 187 | 0/4
|
|
|
|
|
setDurability("CORSAIR", 300, classNode); //Original Durability = 300 | Add 175 | 0/4
|
|
|
|
|
setDurability("GULF_HARAD", 350, classNode); //Original Durability = 350 | Add 162 | 0/4
|
|
|
|
|
setDurability("UMBAR", 450, classNode); //Original Durability = 450 | Add 137 | 0/4
|
|
|
|
|
setDurability("MOREDAIN", 250, classNode); //Original Durability = 250 | Add 187 | 0/4
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
//Elves
|
|
|
|
|
setDurability("WOOD_ELVEN", 1000, classNode); //Original Durability = 500 | Add 125 | 4/4
|
|
|
|
|
modifyMaterial2("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
|
|
|
|
|
|
|
|
|
|
addMaterial("RED_DWARF", classNode);
|
|
|
|
|
addMaterial("WIZARD", classNode);
|
|
|
|
|
@ -68,6 +63,8 @@ public class LOTRMaterialTransformer implements IClassTransformer {
|
|
|
|
|
addMaterial("BATTLENUN", classNode);
|
|
|
|
|
addMaterial("ASH", classNode);
|
|
|
|
|
|
|
|
|
|
// Protection Conversion
|
|
|
|
|
|
|
|
|
|
// Convert your ClassNode back to byte array with ClassWriter
|
|
|
|
|
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
|
|
|
|
|
classNode.accept(writer);
|
|
|
|
|
@ -89,7 +86,51 @@ public class LOTRMaterialTransformer implements IClassTransformer {
|
|
|
|
|
classNode.fields.add(field);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void setDurability(String fieldName, int durability, ClassNode classNode) {
|
|
|
|
|
public void modifyMaterial2(String fieldName, int durability, float protection, ClassNode classNode) {
|
|
|
|
|
MethodNode clinit = null;
|
|
|
|
|
boolean foundField = false;
|
|
|
|
|
|
|
|
|
|
// First, find the <clinit> method
|
|
|
|
|
for (MethodNode method : classNode.methods) {
|
|
|
|
|
if (method.name.equals("<clinit>")) {
|
|
|
|
|
clinit = method;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (clinit == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Iterator<AbstractInsnNode> iter = clinit.instructions.iterator();
|
|
|
|
|
while (iter.hasNext()) {
|
|
|
|
|
AbstractInsnNode insn = iter.next();
|
|
|
|
|
|
|
|
|
|
if (insn instanceof LdcInsnNode && ((LdcInsnNode) insn).cst.equals(fieldName)) {
|
|
|
|
|
foundField = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (foundField && insn instanceof MethodInsnNode && ((MethodInsnNode) insn).name.equals("setProtection")) {
|
|
|
|
|
AbstractInsnNode protectionInsn = insn.getPrevious();
|
|
|
|
|
|
|
|
|
|
if (protectionInsn instanceof IntInsnNode) {
|
|
|
|
|
((LdcInsnNode) protectionInsn).cst = protection;
|
|
|
|
|
System.out.println("[CinderLoE] Updated protection for " + fieldName + " to " + protection);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!foundField) {
|
|
|
|
|
System.out.println("[CinderLoE] Field '" + fieldName + "' not found in <clinit>.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void modifyMaterial(String fieldName, int durability, ClassNode classNode) {
|
|
|
|
|
MethodNode clinit = null;
|
|
|
|
|
boolean foundField = false;
|
|
|
|
|
|
|
|
|
|
@ -114,6 +155,7 @@ public class LOTRMaterialTransformer implements IClassTransformer {
|
|
|
|
|
foundField = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (foundField && insn instanceof MethodInsnNode && ((MethodInsnNode) insn).name.equals("setUses")) {
|
|
|
|
|
AbstractInsnNode durabilityInsn = insn.getPrevious();
|
|
|
|
|
|
|
|
|
|
@ -123,6 +165,8 @@ public class LOTRMaterialTransformer implements IClassTransformer {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!foundField) {
|
|
|
|
|
|