現在、コードは機能していますが、使用している MOD の更新によって問題が発生しています。
これは、私がアクセスしている他の mods コードのモックアップです。
IHandler.class
public abstract interface IHandler
{
public abstract int addValue(int value);
}
旧: Item.class
public final class Item
{
public static IHandler handler;
public static int addValue(int value)
{
handler.addValue(value);
}
}
彼らは Item.addValue(value); を使用しました。彼らのコードで
現在使用しているコードのモックアップ (上記の古いコードで動作します)
Class<?> itemclass = Class.forName("Item");
Method addValue = itemclass.getDeclaredMethod("addValue", Integer.TYPE);
addValue.invoke(item.newInstance(), 25);
私が抱えている問題は、Item.class が変更されたことです。
新規: Item.class
public final class Item
{
public static IHandler handler;
}
現在は Item.handler.addValue(value); を使用しています。彼らのコードで
便利なラッパーを削除すると、メソッドにアクセスできなくなったようです。メソッドを再度呼び出すことができるように、ハンドラーのインスタンスを取得する方法がわかりません。敗北を認める前に私がたどり着いた場所はここにあります:)
Class<?> itemclass = Class.forName("Item");
Field handler = itemclass.getDeclaredField("handler");
Class<?> iHandler = handler.getType();
Method addValue = iHandler.getMethod("addValue", Integer.TYPE);
addValue.invoke(item.newInstance(), 25);
私は見落としている単純なものだと確信しています。
編集:私が見落としていたのは単純なことだと知っていました:) addValue.invoke(handler.getValue(null), 25);
ありがとうミリムース