diff --git a/src/main/java/com/zivilon/cinder_loe/CinderLoE.java b/src/main/java/com/zivilon/cinder_loe/CinderLoE.java index 6c9555b..76cb588 100644 --- a/src/main/java/com/zivilon/cinder_loe/CinderLoE.java +++ b/src/main/java/com/zivilon/cinder_loe/CinderLoE.java @@ -775,10 +775,10 @@ public class CinderLoE { linkLOTRWeapon(welfRelic, "welfRelic"); //Great swords idk where to put them - greatswordAngmar = (new LoEGreatSword(LOTRMaterial.ANGMAR, LOTRMod.orcSteel)).addWeaponDamage(1.0f).setUnlocalizedName("lotr:greatswordAngmar").setTextureName("lotr:greatswordAngmar"); - greatswordLindon = new LoEGreatSword(LOTRMaterial.HIGH_ELVEN, LOTRMod.elfSteel).addWeaponDamage(1.0f).setIsElvenBlade().setUnlocalizedName("lotr:greatswordLindon").setTextureName("lotr:greatswordLindon"); - greatswordDale = (new LoEGreatSword(LOTRMaterial.DALE, Items.iron_ingot)).addWeaponDamage(1.0f).setUnlocalizedName("lotr:greatswordDale").setTextureName("lotr:greatswordDale"); - greatswordNumenor = (new LoEGreatSword(LOTRMaterial.BLACK_NUMENOREAN, Items.iron_ingot)).addWeaponDamage(1.0f).setUnlocalizedName("lotr:greatswordNumenor").setTextureName("lotr:greatswordNumenor"); + greatswordAngmar = (new LoEGreatSword(LOTRMaterial.ANGMAR, LOTRMod.orcSteel)).setUnlocalizedName("lotr:greatswordAngmar").setTextureName("lotr:greatswordAngmar"); + greatswordLindon = new LoEGreatSword(LOTRMaterial.HIGH_ELVEN, LOTRMod.elfSteel).setIsElvenBlade().setUnlocalizedName("lotr:greatswordLindon").setTextureName("lotr:greatswordLindon"); + greatswordDale = (new LoEGreatSword(LOTRMaterial.DALE, Items.iron_ingot)).setUnlocalizedName("lotr:greatswordDale").setTextureName("lotr:greatswordDale"); + greatswordNumenor = (new LoEGreatSword(LOTRMaterial.BLACK_NUMENOREAN, Items.iron_ingot)).setUnlocalizedName("lotr:greatswordNumenor").setTextureName("lotr:greatswordNumenor"); ItemRegistration.register(greatswordAngmar,"greatswordAngmar",6707); ItemRegistration.register(greatswordLindon,"greatswordLindon",6708); @@ -1168,7 +1168,7 @@ public class CinderLoE { bodySunlitWarden = (new LoEArmor(MATERIAL_SUNLIT_WARDEN, 1, LOTRMod.elfSteel)).setUnlocalizedName("lotr:bodySunlitWarden").setTextureName("lotr:bodySunlitWarden"); legsSunlitWarden = (new LoEArmor(MATERIAL_SUNLIT_WARDEN, 2, LOTRMod.elfSteel)).setUnlocalizedName("lotr:legsSunlitWarden").setTextureName("lotr:legsSunlitWarden"); bootsSunlitWarden = (new LoEArmor(MATERIAL_SUNLIT_WARDEN, 3, LOTRMod.elfSteel)).setUnlocalizedName("lotr:bootsSunlitWarden").setTextureName("lotr:bootsSunlitWarden"); - greatswordLight = (new LoEGreatSword(MATERIAL_SUNLIT_WARDEN, (Item)LOTRMod.mithril)).addWeaponDamage(1.0f).setIsElvenBlade().setUnlocalizedName("lotr:greatswordLight").setTextureName("lotr:greatswordLight"); + greatswordLight = (new LoEGreatSword(MATERIAL_SUNLIT_WARDEN, (Item)LOTRMod.mithril)).setIsElvenBlade().setUnlocalizedName("lotr:greatswordLight").setTextureName("lotr:greatswordLight"); effigyOfWrath = new LOTRItemEnchantment(LOTREnchantment.getEnchantmentByName("wrath")).setUnlocalizedName("lotr:effigy_of_wrath").setTextureName("lotr:effigy_of_wrath").setCreativeTab(LoECreativeTabs.tabMiscLoE);; ItemRegistration.register(helmetSunlitWarden, "helmetSunlitWarden", 7001); diff --git a/src/main/java/com/zivilon/cinder_loe/coremod/CoreMod.java b/src/main/java/com/zivilon/cinder_loe/coremod/CoreMod.java index da70b67..85de8b4 100644 --- a/src/main/java/com/zivilon/cinder_loe/coremod/CoreMod.java +++ b/src/main/java/com/zivilon/cinder_loe/coremod/CoreMod.java @@ -14,7 +14,7 @@ import java.util.Map; public class CoreMod implements IFMLLoadingPlugin { @Override public String[] getASMTransformerClass() { - return new String[] {"com.zivilon.cinder_loe.coremod.LOTRMaterialTransformer","com.zivilon.cinder_loe.coremod.LOTRWeaponLinker", "com.zivilon.cinder_loe.coremod.LOTRBannerAdder", "com.zivilon.cinder_loe.coremod.LOTRDimensionAdder", "com.zivilon.cinder_loe.coremod.LOTRSpawnListLinker", "com.zivilon.cinder_loe.coremod.OptiFinePatcher"}; + return new String[] {"com.zivilon.cinder_loe.coremod.LOTRMaterialTransformer","com.zivilon.cinder_loe.coremod.LOTRWeaponLinker", "com.zivilon.cinder_loe.coremod.LOTRBannerAdder", "com.zivilon.cinder_loe.coremod.LOTRDimensionAdder", "com.zivilon.cinder_loe.coremod.LOTRSpawnListLinker", "com.zivilon.cinder_loe.coremod.OptiFinePatcher", "com.zivilon.cinder_loe.coremod.UrukBerserkerGreatswordPatcher"}; } @Override diff --git a/src/main/java/com/zivilon/cinder_loe/coremod/UrukBerserkerGreatswordPatcher.java b/src/main/java/com/zivilon/cinder_loe/coremod/UrukBerserkerGreatswordPatcher.java new file mode 100644 index 0000000..8f350de --- /dev/null +++ b/src/main/java/com/zivilon/cinder_loe/coremod/UrukBerserkerGreatswordPatcher.java @@ -0,0 +1,81 @@ +package com.zivilon.cinder_loe.coremod; + +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.AbstractInsnNode; +import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.FieldInsnNode; +import org.objectweb.asm.tree.FieldNode; +import org.objectweb.asm.tree.InsnList; +import org.objectweb.asm.tree.InsnNode; +import org.objectweb.asm.tree.LdcInsnNode; +import org.objectweb.asm.tree.MethodInsnNode; +import org.objectweb.asm.tree.TypeInsnNode; +import org.objectweb.asm.tree.MethodNode; +import org.objectweb.asm.util.Printer; +import org.objectweb.asm.util.Textifier; +import org.objectweb.asm.util.TraceMethodVisitor; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.Iterator; + +import net.minecraft.launchwrapper.IClassTransformer; + +public class UrukBerserkerGreatswordPatcher implements IClassTransformer { + @Override + public byte[] transform(String name, String transformedName, byte[] basicClass) { + if (!name.equals("lotr.common.LOTRMod")) return basicClass; + ClassReader cr = new ClassReader(basicClass); + ClassNode cn = new ClassNode(); + cr.accept(cn, 0); + + for (MethodNode mn : cn.methods) { + if (!mn.name.equals("preload")) continue; + + AbstractInsnNode insn = mn.instructions.getFirst(); + while (insn != null) { + if (insn.getOpcode() == Opcodes.NEW && insn instanceof TypeInsnNode) { + if (((TypeInsnNode) insn).desc.equals("lotr/common/item/LOTRItemSword")) { + AbstractInsnNode search = insn.getNext(); + boolean patchThis = false; + while (search != null) { + if (search.getOpcode() == Opcodes.NEW && search != insn) { + break; + } + if (search.getOpcode() == Opcodes.PUTSTATIC && search instanceof FieldInsnNode) { + FieldInsnNode fin = (FieldInsnNode) search; + if (fin.owner.equals("lotr/common/LOTRMod") && + fin.name.equals("scimitarUrukBerserker")) { + patchThis = true; + break; + } + } + search = search.getNext(); + } + if (patchThis) { + ((TypeInsnNode) insn).desc = "com/zivilon/cinder_loe/items/LoEGreatSword"; + AbstractInsnNode patch = insn.getNext(); + while (patch != null) { + if (patch.getOpcode() == Opcodes.INVOKESPECIAL && patch instanceof MethodInsnNode) { + MethodInsnNode mi = (MethodInsnNode) patch; + if (mi.owner.equals("lotr/common/item/LOTRItemSword")) { + mi.owner = "com/zivilon/cinder_loe/items/LoEGreatSword"; + break; + } + } + patch = patch.getNext(); + } + System.out.println("[UrukBerserkerGreatswordPatcher] Patched the scimitarUrukBerserker sword to LoEGreatSword"); + } + } + } + insn = insn.getNext(); + } + } + ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); + cn.accept(cw); + return cw.toByteArray(); + } +} diff --git a/src/main/java/com/zivilon/cinder_loe/items/LoEGreatSword.java b/src/main/java/com/zivilon/cinder_loe/items/LoEGreatSword.java index 6f22b18..90b5a65 100644 --- a/src/main/java/com/zivilon/cinder_loe/items/LoEGreatSword.java +++ b/src/main/java/com/zivilon/cinder_loe/items/LoEGreatSword.java @@ -23,6 +23,7 @@ public class LoEGreatSword extends LOTRItemSword { super(material); repair_item = item; setCreativeTab(LoECreativeTabs.tabCombatLoE); + addWeaponDamage(1.0f); } public LoEGreatSword setWeaponDamage(float damage) {