提供: Minecraft Modding Wiki
この編集を取り消せます。
下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
1行目: | 1行目: | ||
− | このページは、ASMの利用方法をサンプルを通じて察してもらうことを目的としている。 | + | このページは、ASMの利用方法をサンプルを通じて察してもらうことを目的としている。 |
− | |||
==メソッドの単純な書き換え== | ==メソッドの単純な書き換え== | ||
ここでは、TileEntityFurnaceの書き換えをサンプルとして、メソッドの書き換えを解説する。<br/> | ここでは、TileEntityFurnaceの書き換えをサンプルとして、メソッドの書き換えを解説する。<br/> | ||
+ | ただし[[Coremodsの基礎]]や[[1.7のクラス書き換え]]に含まれている解説はここでは省略する。<br/> | ||
今回の例ではかまどで焼きあがるまでの時間を200(棒2つ分)から400(棒4つ分)に変更する。 | 今回の例ではかまどで焼きあがるまでの時間を200(棒2つ分)から400(棒4つ分)に変更する。 | ||
===ソースコード=== | ===ソースコード=== | ||
*SampleTransformer.java | *SampleTransformer.java | ||
<source lang = "java"> | <source lang = "java"> | ||
− | + | import net.minecraft.launchwrapper.IClassTransformer; | |
+ | import net.minecraftforge.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper; | ||
+ | import org.objectweb.asm.ClassReader; | ||
+ | import org.objectweb.asm.ClassVisitor; | ||
+ | import org.objectweb.asm.ClassWriter; | ||
+ | import org.objectweb.asm.Type; | ||
public class SampleTransformer implements IClassTransformer{ | public class SampleTransformer implements IClassTransformer{ | ||
107行目: | 112行目: | ||
*SampleAdapter.java | *SampleAdapter.java | ||
<source lang = "java"> | <source lang = "java"> | ||
− | + | import org.objectweb.asm.ClassVisitor; | |
+ | import org.objectweb.asm.MethodVisitor; | ||
+ | import org.objectweb.asm.Opcodes; | ||
+ | import org.objectweb.asm.Type; | ||
+ | |||
+ | import static com.mods.kina.asm.SampleTransformer.*; | ||
+ | import static org.objectweb.asm.Opcodes.*; | ||
public class SampleAdapter{ | public class SampleAdapter{ | ||
239行目: | 250行目: | ||
</source> | </source> | ||
; super.visitVarInsn(ALOAD, 1); | ; super.visitVarInsn(ALOAD, 1); | ||
− | : スタックに引数1を積む。( | + | : スタックに引数1を積む。(ALOAD 0はthisが入っている。) |
; super.visitMethodInsn(INVOKESTATIC, "SampleHooks", "totalCookTime", SampleTransformer.toDesc(int.class, "net.minecraft.item.ItemStack"), false); | ; super.visitMethodInsn(INVOKESTATIC, "SampleHooks", "totalCookTime", SampleTransformer.toDesc(int.class, "net.minecraft.item.ItemStack"), false); | ||
: 用意したメソッドを呼ぶ。 | : 用意したメソッドを呼ぶ。 | ||
251行目: | 262行目: | ||
(書いている途中ですが、上で説明したのを応用すればなんとかなると思います。) | (書いている途中ですが、上で説明したのを応用すればなんとかなると思います。) | ||
==その他== | ==その他== | ||
− | |||
− | |||
− | |||
− | |||
− | |||
==参考== | ==参考== | ||
− | [http://asm.ow2.org/ ASM公式] | + | [[http://asm.ow2.org/ ASM公式]] |
− | [https://ja.wikipedia.org/wiki/Java%E3%83%90%E3%82%A4%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89 Javaバイトコード] | + | [[https://ja.wikipedia.org/wiki/Java%E3%83%90%E3%82%A4%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89 Javaバイトコード]] |