From 20c10a2a2e811f9164424836c2e0f10492e34fe9 Mon Sep 17 00:00:00 2001 From: Shinare Date: Wed, 8 May 2024 05:09:46 +0300 Subject: [PATCH] Added protection to material modify --- .gradle/8.2.1/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../coremod/LOTRMaterialTransformer.java | 75 ++++++++++++------ 2 files changed, 49 insertions(+), 26 deletions(-) diff --git a/.gradle/8.2.1/fileHashes/fileHashes.lock b/.gradle/8.2.1/fileHashes/fileHashes.lock index eedadf1db7f9d92498831ef897c5e13256112004..1b5ae015573aff738f10d898f82ede5a168ccc3c 100644 GIT binary patch literal 17 WcmZRc9z7+~bjR9%3?RT9)&u}I!3Aaj literal 17 WcmZRc9z7+~bjR9%3?RVFEC&EKw*;>M 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 ad8025e..787df6b 100644 --- a/src/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java +++ b/src/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java @@ -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 method for (MethodNode method : classNode.methods) { if (method.name.equals("")) { + 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 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) {