Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.devdelta.Delta.tweaker.valocheat;
- 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.InsnList;
- import org.objectweb.asm.tree.InsnNode;
- import org.objectweb.asm.tree.MethodNode;
- import net.minecraft.launchwrapper.IClassTransformer;
- /**
- * Tweaker Forge register par un CoreMod
- *
- * Le code de base est tiré de ce tutoriel:
- * https://www.minecraftforgefrance.fr/topic/3495/cr%C3%A9er-un-coremod-pour-modifier-les-classes-de-minecraft
- *
- * @author xTrM_
- */
- public class ValorionExampleTweaker implements IClassTransformer, Opcodes {
- @Override
- public byte[] transform(String name, String transformedName, byte[] basicClass) {
- // Si la classe est ValoCheat
- if(name.equalsIgnoreCase("fr.guigeek.valorion.utils.ValoCheat")) {
- // Transformer la classe en rendant ineffectif la méthode shutdown
- return transformNullifier(basicClass, "shutdown");
- }
- return basicClass;
- }
- public byte[] transformNullifier(byte[] basicClass, String method) {
- // Base ASM pour Transform
- ClassNode classNode = new ClassNode();
- ClassReader classReader = new ClassReader(basicClass);
- classReader.accept(classNode, ClassReader.EXPAND_FRAMES);
- // On créé une liste d'instructions qui
- // viendra remplacer celle de la méthode choisit,
- // contenant simplement l'opcode RETURN (arreter le code)
- InsnList list = new InsnList();
- list.add(new InsnNode(RETURN));
- // On cherche dans toutes les méthodes de la classe (ValoCheat)
- for(MethodNode methodNode : classNode.methods) {
- // Si la méthode != null & que le nom de la méthode est celui recherché (shutdown)
- if(methodNode != null && methodNode.name.equalsIgnoreCase(method)) {
- // On remplace les instructions par la liste définie
- methodNode.instructions = list;
- }
- }
- // Base ASM pour Transform
- ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
- classNode.accept(classWriter);
- return classWriter.toByteArray();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement