From c67e450dbd5a6e062d6d3ac49336726fc5d2653a Mon Sep 17 00:00:00 2001 From: KeyLime17 Date: Tue, 7 May 2024 21:16:43 -0400 Subject: [PATCH] Modified Material Durability works, protection levels still need to be worked on --- .gradle/8.2.1/checksums/checksums.lock | Bin 17 -> 17 bytes .gradle/8.2.1/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../coremod/LOTRMaterialTransformer.java | 106 +++++++++++++----- 3 files changed, 75 insertions(+), 31 deletions(-) diff --git a/.gradle/8.2.1/checksums/checksums.lock b/.gradle/8.2.1/checksums/checksums.lock index 168218c668656d28620afc9f8e3a9d00af5cd071..eeabfcbf8458df93fc5ecdf4040c8f53c172de2f 100644 GIT binary patch literal 17 UcmZQRdHM literal 17 WcmZRc9z7+~bjR9%3?RVtzZL*F3kC@Q diff --git a/src/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java b/src/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java index 4e2081f..ad8025e 100644 --- a/src/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java +++ b/src/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java @@ -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 method + for (MethodNode method : classNode.methods) { + if (method.name.equals("")) { + clinit = method; + break; + } + } + + if (clinit == null) { + return; + } + + + Iterator 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 ."); + } + } + + 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) {