ページ 2 / 2
Re: レシピの仕様変更でクラスの書き換えに失敗する
Posted: 2021年11月21日(日) 08:57
by おがさくら
visitMethodInsnのdesc引数を"Lnet/minecraft/inventory/InventoryCrafting;Lnet/minecraft/world/World;)Lnet/minecraft/item/ItemStack;"に変えても駄目だったので関係ないかと...
https://www.tntmodders.com/tutorial/asm-1710/
こちらのサイトの内容を参考にしているのですがgetObjectTypeを使って問題なくできるらしいのでエラーの原因ではないと思われます。
Re: レシピの仕様変更でクラスの書き換えに失敗する
Posted: 2021年11月21日(日) 22:28
by penM
おがさくら さんが書きました: ↑2021年11月19日(金) 20:14
スーパークラスのvisitMethodInsnに引数をそのまま入れて実行するのはできます
Type.getObjectType("net/minecraft/item/ItemStack")をType.VOID_TYPEにして呼び出すメソッドもvoid型にするのもできました。
しかし、getMethodDescriptorの第一引数にType.getObjectType("net/minecraft/item/ItemStack")を入れると起動できなくなってしまいます。
getMethodDescriptorの第一引数はreturnType - メソッドの戻りの型なのに「argumentTypes - メソッドの引数の型」を入れるのが問題なのではないでしょうか?
Re: レシピの仕様変更でクラスの書き換えに失敗する
Posted: 2021年11月24日(水) 11:13
by おがさくら
Type.getObjectType("net/minecraft/item/ItemStack")は戻り値の型だと思うのですが...
Re: レシピの仕様変更でクラスの書き換えに失敗する
Posted: 2021年11月30日(火) 11:28
by penM
予想なのですが、
public static StringSE getMethodDescriptor(Type returnType,Type... argumentTypes)
におけるType returnType
とは、
Type.VOID_TYPE
Type.SHORT_TYPE
Type.LONG_TYPE
Type.INT_TYPE
Type.FLOAT_TYPE
Type.DOUBLE_TYPE
Type.CHAR_TYPE
Type.BYTE_TYPE
Type.BOOLEAN_TYPE
を指しているのではないでしょうか?
この根拠としては、参考サイトに
Type.getMethodDescriptor(Type.VOID_TYPE, Type.getObjectType("net/minecraft/tileentity/TileEntity"))
の記述があるためです。
そしてType.~_TYPE
は、java内部での基本タイプ(int,void,char)への単なる参照な気がします。
書き方があっているかわかりませんが、下記のように表記しても動きそうな気がします。
Type.getMethodDescriptor(void, Type.getObjectType("net/minecraft/tileentity/TileEntity"))
ここで、
Type.getObjectType
に関してですが、
getObjectType
public static Type getObjectType(StringSE internalName)
指定された内部名に対応する Type
を返します。
とあります。
この関数が返すType
とは、Type.VOID_TYPE
のType.
の部分を返しているのではないでしょうか?
そうすると
getMethodDescriptor(Type.getObjectType("net/minecraft/item/ItemStack") , ~)
のような表記は、getMethodDescriptor
にintなのか、voidなのかを渡していないことになると思います。
(java書いたこと無いので間違っていたら笑ってください )
Re: レシピの仕様変更でクラスの書き換えに失敗する
Posted: 2021年12月18日(土) 21:12
by おがさくら
返信遅れてすみません&ありがとうございます
これ以上は解決できそうにないので諦めることにします...