gpt4 book ai didi

java - 我可以使用 bytebuddy 调用带有我自己的参数的类的现有函数吗?

转载 作者:太空宇宙 更新时间:2023-11-04 09:34:11 24 4
gpt4 key购买 nike

在我正在玩的游戏中,我已经缩小范围,在我用鼠标选择敌人后会发生一个函数attackEnemy(int var)。

我与几个 bytebuddy 代理合作,查看此事件发生时的函数名称和参数值。

但是我在使用代理修改类以便可以与其对象进行交互时遇到问题。我最多可以调用我自己创建的静态函数。

比如我这里添加一个方法:

public static void myMethod() throws Exception {

System.out.println("My generated method");
}

我可以用代理将其附加到类

public class Agent {

public static void premain(String arguments, Instrumentation instrumentation) {

System.out.println("Agent for add a method ");

new AgentBuilder.Default()
.with(new AgentBuilder.InitializationStrategy.SelfInjection.Eager())

.type((ElementMatchers.nameContains("myC")))
.transform((builder, typeDescription, classLoader, module) -> builder
.defineMethod("myMethod", void.class, Visibility.PUBLIC)
.intercept(MethodDelegation.to(AddMethod.class))
.method(ElementMatchers.nameContains("method1"))
.intercept(SuperMethodCall.INSTANCE
.andThen(MethodCall.invoke(ElementMatchers.nameContains("myMethod"))))

).installOn(instrumentation);



}


}

但这只是我对代理功能的了解。

如果我更改 MethodDelegation.to(new AddMethod())

我可以调用非静态方法,但我仍然只能访问我创建的新类及其方法。

所以我在概念层面上真的很失败。

我正在寻找的最终结果是我创建的类能够调用 AttackEnemy(int var) 函数或完全重新创建该函数,但我当前的代理似乎只能在自己的类中创建方法,所以我不确定从哪里开始。

最佳答案

您可能正在寻找 MethodDelegation,它允许您定义一个新类,通过带注释的参数调度方法。您可以在类 javadoc 中找到详细信息。

关于java - 我可以使用 bytebuddy 调用带有我自己的参数的类的现有函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56712246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com