package io.github.jordandoyle.mcinject.helpers; import static org.apache.commons.lang3.StringUtils.*; import javax.swing.JOptionPane; import org.objectweb.asm.tree.FieldInsnNode; import org.objectweb.asm.tree.FieldNode; import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; public class ObfuscatedMapping { private String owner, name, desc, obfOwner, obfName; private static boolean obfuscated = false; static { try { Class test = ObfuscatedMapping.class.getClassLoader().loadClass( "net.minecraft.src.Block"); } catch (Exception e) { obfuscated = true; } } public ObfuscatedMapping(String owner, String name, String desc) { this.owner = owner; this.name = name; this.desc = desc; if (!isClass()) { this.obfName = getMapping(); this.obfOwner = new ObfuscatedMapping(owner).getMapping(); } if (contains(owner, ".")) throw new IllegalArgumentException(owner); } public ObfuscatedMapping(String owner) { this(owner, "", ""); } public ObfuscatedMapping(String owner, String name) { this(owner, name, ""); } public boolean equals(MethodInsnNode node) { return (obfName.equals(node.name) || name.equals(node.name)) && desc.equals(node.desc) && (obfOwner.equals(node.owner) || owner.equals(node.owner)); } public boolean equals(FieldInsnNode node) { return (obfName.equals(node.name) || name.equals(node.name)) && (obfOwner.equals(node.owner) || owner.equals(node.owner)); } public boolean equals(MethodNode node) { return (obfName.equals(node.name) || name.equals(node.name)) && desc.equals(node.desc); } public boolean equals(FieldNode node) { return (obfName.equals(node.name) || name.equals(node.name)); } public String getRealOwner() { return replace(owner, "/", "."); } @Override public String toString() { return getMapping(); } public boolean isClass() { return name.length() == 0; } public boolean isMethod() { return desc.contains("("); } public boolean isField() { return !isClass() && !isMethod(); } public String getMapping() { if (!obfuscated) return (isClass()) ? getRealOwner() : name; if (isClass()) return Mapper.getClass(getRealOwner()); if (isMethod()) return Mapper.getMethod(Mapper.getClass(getRealOwner()), name); if (isField()) return Mapper.getField(Mapper.getClass(getRealOwner()), name); return getRealOwner(); } }