diff --git a/.gradle/8.2.1/checksums/checksums.lock b/.gradle/8.2.1/checksums/checksums.lock index 0b4c425..168218c 100644 Binary files a/.gradle/8.2.1/checksums/checksums.lock and b/.gradle/8.2.1/checksums/checksums.lock differ diff --git a/.gradle/8.2.1/fileHashes/fileHashes.lock b/.gradle/8.2.1/fileHashes/fileHashes.lock index 3622f4f..2403e9c 100644 Binary files a/.gradle/8.2.1/fileHashes/fileHashes.lock and b/.gradle/8.2.1/fileHashes/fileHashes.lock differ diff --git a/src/main/java/com/zivilon/cinder_loe/Materials.java b/src/main/java/com/zivilon/cinder_loe/Materials.java index 77cd350..21ddfda 100644 --- a/src/main/java/com/zivilon/cinder_loe/Materials.java +++ b/src/main/java/com/zivilon/cinder_loe/Materials.java @@ -23,40 +23,6 @@ public class Materials { modifyMaterial("ASH", 2000, 0.0F, 0.6F, 2, 7.0F, 10, CinderLoE.ingotAsh); //modifyMaterial("BRONZE", 2000, 0.0F, 0.6F, 2, 7.0F, 10, LOTRMod.bronze); - -// Modified Vanilla Material, for Royal armor and prot (1000 - Original Durability) * 0.25 - // Orcs - modifyMaterial("ANGMAR", 480, 2.5F, 0.6F, 2, 6.0F, 10, LOTRMod.orcSteel); //Original Durability = 350 | Add 162 | 1/4 - modifyMaterial("URUK", 662, 3.0F, 0.7F, 2, 6.0F, 5, LOTRMod.urukSteel); //Original Durability = 550 | Add 112 | 1/4 - modifyMaterial("BLACK_URUK", 774, 3.0F, 0.7F, 2, 6.0F, 6, LOTRMod.blackUrukSteel); //Original Durability = 550 | Add 112 | 2/4 - modifyMaterial("HALF_TROLL", 475, 2.5F, 0.6F, 1, 5.0F, 6, LOTRMod.gemsbokHide); //Original Durability = 300 | Add 175 | 1/4 - - // Good Humans - modifyMaterial("DALE", 475, 2.5F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); //Original Durability = 300 | Add 175 | 1/4 - modifyMaterial("GONDOR", 725, 2.5F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); //Original Durability = 450 | Add 137 | 2/4 - modifyMaterial("DORWINION_ELF", 875, 3.0F, 0.6F, 2, 7.0F, 15, LOTRMod.elfSteel); //Original Durability = 500 | Add 125 | 2/4 - modifyMaterial("ROHAN", 300, 2.5F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); //Original Durability = 300 | Add 175 | 0/4 - modifyMaterial("TAUREDAIN", 300, 2.5F, 0.6F, 3, 8.0F, 10, LOTRMod.bronze); //Original Durability = 300 | Add 175 | 0/4 - modifyMaterial("DORWINION", 400, 2.5F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); //Original Durability = 400 | Add 150 | 0/4 - modifyMaterial("LOSSARNACH", 300, 2.5F, 0.6F, 3, 8.0F, 10, Items.iron_ingot); //Original Durability = 300 | Add 175 | 0/4 - modifyMaterial("LAMEDON", 300, 2.5F, 0.6F, 3, 8.0F, 10, Items.iron_ingot); //Original Durability = 300 | Add 175 | 0/4 - - - // Evil Humans - modifyMaterial("RHUN_GOLD", 558, 2.5F, 0.6F, 2, 6.0F, 10, LOTRMod.gildedIron); //Original Durability = 450 | Add 137 | 1/4 - modifyMaterial("RHUN", 400, 2.5F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); //Original Durability = 400 | Add 150 | 0/4 - modifyMaterial("DUNLENDING", 437, 2.0F, 0.6F, 2, 6.0F, 8, Items.iron_ingot); //Original Durability = 250 | Add 187 | 1/4 - modifyMaterial("NEAR_HARAD", 650, 2.5F, 0.6F, 2, 6.0F, 10, LOTRMod.bronze); //Original Durability = 300 | Add 175 | 2/4 - modifyMaterial("HARNEDOR", 250, 2.0F, 0.6F, 2, 6.0F, 8, LOTRMod.bronze); //Original Durability = 250 | Add 187 | 0/4 - modifyMaterial("CORSAIR", 300, 2.5F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); //Original Durability = 300 | Add 175 | 0/4 - modifyMaterial("GULF_HARAD", 350, 2.5F, 0.6F, 2, 6.0F, 10, LOTRMod.bronze); //Original Durability = 350 | Add 162 | 0/4 - modifyMaterial("UMBAR", 450, 2.5F, 0.6F, 2, 6.0F, 10, Items.iron_ingot); //Original Durability = 450 | Add 137 | 0/4 - modifyMaterial("MOREDAIN", 250, 2.0F, 0.6F, 2, 6.0F, 8, LOTRMod.gemsbokHide); //Original Durability = 250 | Add 187 | 0/4 - - //Elves - modifyMaterial("WOOD_ELVEN", 1000, 3.0F, 0.6F, 2, 9.0F, 15, LOTRMod.elfSteel); //Original Durability = 500 | Add 125 | 4/4 - - } public static void modifyMaterial(String fieldName, int uses, float weapon_damage, float protection, int harvest_level, float speed, int enchantability, Item crafting_item) { 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 9552328..4e2081f 100644 --- a/src/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java +++ b/src/main/java/com/zivilon/cinder_loe/coremod/LOTRMaterialTransformer.java @@ -7,6 +7,14 @@ 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 java.util.Iterator; public class LOTRMaterialTransformer implements IClassTransformer { @Override @@ -18,7 +26,38 @@ public class LOTRMaterialTransformer implements IClassTransformer { ClassNode classNode = new ClassNode(); reader.accept(classNode, 0); - // Add the RED_DWARF_STEEL field + + 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 + + // 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 + + + // 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 + + //Elves + setDurability("WOOD_ELVEN", 1000, classNode); //Original Durability = 500 | Add 125 | 4/4 + + addMaterial("RED_DWARF", classNode); addMaterial("WIZARD", classNode); addMaterial("LIMWAITH_BONE", classNode); @@ -49,4 +88,45 @@ public class LOTRMaterialTransformer implements IClassTransformer { ); classNode.fields.add(field); } + + public void setDurability(String fieldName, int durability, 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("setUses")) { + AbstractInsnNode durabilityInsn = insn.getPrevious(); + + if (durabilityInsn instanceof IntInsnNode) { + ((IntInsnNode) durabilityInsn).operand = durability; + System.out.println("[CinderLoE] Updated durability for " + fieldName + " to " + durability); + return; + } + } + } + + if (!foundField) { + System.out.println("[CinderLoE] Field '" + fieldName + "' not found in ."); + } + } } diff --git a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRMaterial.java b/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRMaterial.java deleted file mode 100644 index 865f938..0000000 --- a/src/main/java/com/zivilon/cinder_loe/mixins/MixinLOTRMaterial.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.zivilon.cinder_loe.mixins; - -import lotr.common.LOTRMod; -import net.minecraft.block.Block; -import net.minecraft.item.Item; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -import lotr.common.item.LOTRMaterial; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Method; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; - -import com.zivilon.cinder_loe.CinderLoE; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(LOTRMaterial.class) -public abstract class MixinLOTRMaterial { - - - static { - try { - Class lotrMaterialClass = Class.forName("lotr.common.item.LOTRMaterial"); - Field redDwarfSteelField = lotrMaterialClass.getField("RED_DWARF_STEEL"); - - - // Reflection to access and instantiate the private constructor of LOTRMaterial - Constructor constructor = lotrMaterialClass.getDeclaredConstructor(String.class); - constructor.setAccessible(true); - Object redDwarfSteelMaterial = constructor.newInstance("RED_DWARF_STEEL"); - - - // Reflection to call the private methods on the new instance - Method setUses = lotrMaterialClass.getDeclaredMethod("setUses", int.class); - Method setDamage = lotrMaterialClass.getDeclaredMethod("setDamage", float.class); - Method setProtection = lotrMaterialClass.getDeclaredMethod("setProtection", float.class); - Method setHarvestLevel = lotrMaterialClass.getDeclaredMethod("setHarvestLevel", int.class); - Method setSpeed = lotrMaterialClass.getDeclaredMethod("setSpeed", float.class); - Method setEnchantability = lotrMaterialClass.getDeclaredMethod("setEnchantability", int.class); - - setUses.setAccessible(true); - setDamage.setAccessible(true); - setProtection.setAccessible(true); - setHarvestLevel.setAccessible(true); - setSpeed.setAccessible(true); - setEnchantability.setAccessible(true); - - // Red Dwarf - setUses.invoke(redDwarfSteelMaterial, 700); - setDamage.invoke(redDwarfSteelMaterial, 3.0F); - setProtection.invoke(redDwarfSteelMaterial, 0.7F); - setHarvestLevel.invoke(redDwarfSteelMaterial, 3); - setSpeed.invoke(redDwarfSteelMaterial, 7.0F); - setEnchantability.invoke(redDwarfSteelMaterial, 10); - - - - // Assuming a public method to set the crafting item exists - Method setCraftingItem = lotrMaterialClass.getDeclaredMethod("setCraftingItem", Item.class); - setCraftingItem.setAccessible(true); - setCraftingItem.invoke(redDwarfSteelMaterial, CinderLoE.redDwarfSteel); - - - // Now, assign the created and configured LOTRMaterial instance to the static field - redDwarfSteelField.set(null, redDwarfSteelMaterial); - - } catch (Exception e) { - e.printStackTrace(); - } - } -}