2
0
Fork 0

Modified Material Durability works, protection levels still need to be worked on

frozen
KeyLime17 1 year ago
parent 89dde83214
commit c67e450dbd

@ -5,14 +5,7 @@ import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter; import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Opcodes; import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.*;
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 java.util.Iterator; import java.util.Iterator;
@ -27,36 +20,38 @@ public class LOTRMaterialTransformer implements IClassTransformer {
reader.accept(classNode, 0); reader.accept(classNode, 0);
setDurability("ANGMAR", 480, classNode); //Original Durability = 350 | Add 162 | 1/4 modifyMaterial2("ANGMAR", 480, 0.6F, classNode); //Original Durability = 350 | Add 162 | 1/4
setDurability("URUK", 662, classNode); //Original Durability = 550 | Add 112 | 1/4 modifyMaterial2("URUK", 662, 0.7F, classNode); //Original Durability = 550 | Add 112 | 1/4
setDurability("BLACK_URUK", 774, classNode); //Original Durability = 550 | Add 112 | 2/4 modifyMaterial2("BLACK_URUK", 774, 0.7F, classNode); //Original Durability = 550 | Add 112 | 2/4
setDurability("HALF_TROLL", 475, classNode); //Original Durability = 300 | Add 175 | 1/4 modifyMaterial2("HALF_TROLL", 475, 0.6F, classNode); //Original Durability = 300 | Add 175 | 1/4
// Good Humans // Good Humans
setDurability("DALE", 475, classNode); //Original Durability = 300 | Add 175 | 1/4 modifyMaterial2("DALE", 475, 0.6F, classNode); //Original Durability = 300 | Add 175 | 1/4
setDurability("GONDOR", 725, classNode); //Original Durability = 450 | Add 137 | 2/4 modifyMaterial2("GONDOR", 725, 0.6F, classNode); //Original Durability = 450 | Add 137 | 2/4
setDurability("DORWINION_ELF", 875, classNode); //Original Durability = 500 | Add 125 | 2/4 modifyMaterial2("DORWINION_ELF", 875, 0.6F, classNode); //Original Durability = 500 | Add 125 | 2/4
setDurability("ROHAN", 300, classNode); //Original Durability = 300 | Add 175 | 0/4 modifyMaterial2("ROHAN", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
setDurability("TAUREDAIN", 300, classNode); //Original Durability = 300 | Add 175 | 0/4 modifyMaterial2("TAUREDAIN", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
setDurability("DORWINION", 400, classNode); //Original Durability = 400 | Add 150 | 0/4 modifyMaterial2("DORWINION", 400, 0.6F, classNode); //Original Durability = 400 | Add 150 | 0/4
setDurability("LOSSARNACH", 300, classNode); //Original Durability = 300 | Add 175 | 0/4 modifyMaterial2("LOSSARNACH", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
setDurability("LAMEDON", 300, classNode); //Original Durability = 300 | Add 175 | 0/4 modifyMaterial2("LAMEDON", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
// Evil Humans // Evil Humans
setDurability("RHUN_GOLD", 558, classNode); //Original Durability = 450 | Add 137 | 1/4 modifyMaterial2("RHUN_GOLD", 558, 0.6F, classNode); //Original Durability = 450 | Add 137 | 1/4
setDurability("RHUN", 400, classNode); //Original Durability = 400 | Add 150 | 0/4 modifyMaterial2("RHUN", 400, 0.6F, classNode); //Original Durability = 400 | Add 150 | 0/4
setDurability("DUNLENDING", 437, classNode); //Original Durability = 250 | Add 187 | 1/4 modifyMaterial2("DUNLENDING", 437, 0.6F, classNode); //Original Durability = 250 | Add 187 | 1/4
setDurability("NEAR_HARAD", 650, classNode); //Original Durability = 300 | Add 175 | 2/4 modifyMaterial2("NEAR_HARAD", 650, 0.6F, classNode); //Original Durability = 300 | Add 175 | 2/4
setDurability("HARNEDOR", 250, classNode); //Original Durability = 250 | Add 187 | 0/4 modifyMaterial2("HARNEDOR", 250, 0.6F, classNode); //Original Durability = 250 | Add 187 | 0/4
setDurability("CORSAIR", 300, classNode); //Original Durability = 300 | Add 175 | 0/4 modifyMaterial2("CORSAIR", 300, 0.6F, classNode); //Original Durability = 300 | Add 175 | 0/4
setDurability("GULF_HARAD", 350, classNode); //Original Durability = 350 | Add 162 | 0/4 modifyMaterial2("GULF_HARAD", 350, 0.6F, classNode); //Original Durability = 350 | Add 162 | 0/4
setDurability("UMBAR", 450, classNode); //Original Durability = 450 | Add 137 | 0/4 modifyMaterial2("UMBAR", 450, 0.6F, classNode); //Original Durability = 450 | Add 137 | 0/4
setDurability("MOREDAIN", 250, classNode); //Original Durability = 250 | Add 187 | 0/4 modifyMaterial2("MOREDAIN", 250, 0.6F, classNode); //Original Durability = 250 | Add 187 | 0/4
//Elves //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("RED_DWARF", classNode);
addMaterial("WIZARD", classNode); addMaterial("WIZARD", classNode);
@ -68,6 +63,8 @@ public class LOTRMaterialTransformer implements IClassTransformer {
addMaterial("BATTLENUN", classNode); addMaterial("BATTLENUN", classNode);
addMaterial("ASH", classNode); addMaterial("ASH", classNode);
// Protection Conversion
// Convert your ClassNode back to byte array with ClassWriter // Convert your ClassNode back to byte array with ClassWriter
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
classNode.accept(writer); classNode.accept(writer);
@ -89,7 +86,51 @@ public class LOTRMaterialTransformer implements IClassTransformer {
classNode.fields.add(field); 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; MethodNode clinit = null;
boolean foundField = false; boolean foundField = false;
@ -114,6 +155,7 @@ public class LOTRMaterialTransformer implements IClassTransformer {
foundField = true; foundField = true;
} }
if (foundField && insn instanceof MethodInsnNode && ((MethodInsnNode) insn).name.equals("setUses")) { if (foundField && insn instanceof MethodInsnNode && ((MethodInsnNode) insn).name.equals("setUses")) {
AbstractInsnNode durabilityInsn = insn.getPrevious(); AbstractInsnNode durabilityInsn = insn.getPrevious();
@ -123,6 +165,8 @@ public class LOTRMaterialTransformer implements IClassTransformer {
return; return;
} }
} }
} }
if (!foundField) { if (!foundField) {

Loading…
Cancel
Save