Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private byte[] transformBlockLeavesBase(byte[] bytecode, boolean obf) throws IOException {
- ClassNode classNode = new ClassNode();
- ClassReader classReader = new ClassReader(bytecode);
- classReader.accept(classNode, 0);
- //Решил рассмотреть добавление 1-го метода в тело класса
- String getCollisionBox = obf ? "b" : "getCollisionBoundingBoxFromPool";
- String world = obf ? "Labw;" : "Lnet/minecraft/world/World;";
- String axisAlignedBB = obf ? "Lasx;" : "Lnet/minecraft/util/AxisAlignedBB;";
- MethodNode method = new MethodNode(Opcodes.ASM4);
- method.name = getCollisionBox;
- method.desc = "(" + world + "III)" + axisAlignedBB;
- method.access = 1; //число доступа ?
- method.maxLocals = 5; //число локальных переменных?Если нет считать самому в конце байт кода
- method.maxStack = 1; // Если метод НЕ абстрактный - то пишем
- method.instructions.add(new LabelNode()); //Добавление метки на которую можно будет прыгнуть с помощью инструкции JUMP
- method.instructions.add(new InsnNode(1)); //не понял почему 1,но что то вроде инструкции?
- method.instructions.add(new InsnNode(Opcodes.ARETURN)); //возврат значения соответствующего типа.Если чесно не понял,нашел таблицу со списком всех Opcodes и цифрами
- method.instructions.add(new LabelNode()); // http://asm.ow2.org/jdiff223to31/ASM%202.2.3/constant-values.html#org.objectweb.asm.Opcodes.ARETURN
- method.exceptions = new ArrayList<String>();
- classNode.methods.add(method);
- ClassWriter writer = new ClassWriter(0);
- classNode.accept(writer);
- return writer.toByteArray();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement