提供: Minecraft Modding Wiki
移動先: 案内検索

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 編集中の文章
1行目: 1行目:
#REDIRECT [[Access Transformer利用]]
+
{{前提MOD|reqmod="Minecraft Forge Universal 10.13.0.1207"}}
 +
{{ チュートリアル難易度 | difficulty=1 |clear=none}}
 +
 
 +
1.7からの、クラス書き換え方法です。
 +
基本的には[[coremodsの基礎]]と同じです。
 +
 
 +
''import文は記述していません。''
 +
 
 +
==ソースコード==
 +
*SampleClassTransformCore.java
 +
<source lang="java">
 +
 
 +
public class SampleClassTransformCore extends DummyModContainer {
 +
    public SampleClassTransformCore() {
 +
        super(new ModMetadata());
 +
 
 +
        // @Modのように記述します。
 +
        ModMetadata meta = super.getMetadata();
 +
        meta.modid = "sampleclasstransform";
 +
        meta.name = "SampleClassTransform";
 +
        meta.version = "1.0";
 +
    }
 +
 
 +
    @Override
 +
    public boolean registerBus(EventBus bus, LoadController lc) {
 +
        bus.register(this);
 +
        return true;
 +
    }
 +
}
 +
 
 +
</source>
 +
 
 +
*SampleLoadingPlugin.java
 +
<source lang="java">
 +
 
 +
public class SampleLoadingPlugin implements IFMLLoadingPlugin {
 +
      @Override
 +
        public String[] getLibraryRequestClass() {
 +
                return null;
 +
        }
 +
 
 +
        @Override
 +
        public String[] getASMTransformerClass() {
 +
                return new String[] {"tutorial.asm.SampleClassTransformer"};;
 +
        }
 +
        @Override
 +
        public String getModContainerClass() {
 +
                return "tutorial.asm.SampleClassTransformCore";
 +
        }
 +
        @Override
 +
        public String getSetupClass() {
 +
                return null;
 +
        }
 +
        @Override
 +
        public void injectData(Map<String, Object> data) {
 +
 
 +
        }
 +
}
 +
 
 +
</source>
 +
 
 +
*SampleClassTransformer.java
 +
<source lang="java">
 +
 
 +
public class SampleCrassTransformer implements IClassTransformer {
 +
    //この配列に、書き換えるクラス名を完全修飾で記述します。
 +
    public static final String[] transformClasses = new String[] {"net.minecraft.client.renderer.ItemRenderer"};
 +
 
 +
    @Override
 +
    public byte[] transform(byte[] bytes, String name, String transformedName) {
 +
        if (Arrays.asList(transformClasses).contains(name)) {
 +
            return replaceClass(bytes, name, transformedName);
 +
        }
 +
        return bytes;
 +
    }
 +
 
 +
    private byte[] replaceClass(byte[] bytes, String name, String transformedName) {
 +
       
 +
        return bytes;
 +
    }
 +
}
 +
 
 +
</source>
 +
 
 +
*SampleAccessTransformer.java
 +
<source lang="java">
 +
package tutorial.asm;
 +
 
 +
 
 +
public class SampleAccessTransformer extends AccessTransformer {
 +
    public SampleAccessTransformer() { super("sample_at.cfg"); }
 +
}
 +
 
 +
</source>
 +
 
 +
*sample_at.cfg
 +
<source lang="text">
 +
public net.minecraft.client.renderer.ItemRenderer * #クラス丸ごと書き換え
 +
public net.minecraft.client.renderer.ItemRenderer *() #メソッドを全て書き換え
 +
 
 +
</source>
 +
 
 +
==解説==
 +
*SampleClassTransformCore.java
 +
Modのダミーのエントリポイント。
 +
@Modアノテーションを使わず、DummyModContainerをextendsする。
 +
 
 +
 
 +
*SampleLoadingPlugin.java
 +
このModの実体であるLoadingPlugin。
 +
ここでクラス書き換えをするクラスのパッケージを返す。
 +
 
 +
*SampleClassTransformer.java
 +
クラス読み込み処理の割り込みをし、クラスを実際に書き換えるクラス。
 +
IClassTransformerを実装するため、transformメソッドをオーバーライドする必要がある。
 +
 
 +
*SampleAccessTransformer.java
 +
スーパークラスに書き換えるクラスの詳細情報が入ったcfgファイル名を渡すだけ。
 +
 
 +
*sample_at.cfg
 +
クラス書き換えに関する情報。

Minecraft Modding Wikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMinecraft Modding Wiki:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)