この記事は"ModLoader1.2.3以降"を前提MODとしています。 |
設定ファイルの生成方法は3種類あり、それぞれ使い勝手が違います。
目次
ModLoaderの機能を使用した方法[編集]
最も簡単な方法ですが、後述の事前準備が必要となります。
サンプルソース[編集]
package net.minecraft.src; public class mod_hoge extends BaseMod { @MLProp(info="please assign an ID, hogeBlock", min = 1, max = 255) public static int hogeBlockID = 111; @MLProp public static int hogeItemID = 5000; public static Block hogeBlock; public static Item hogeItem; public String getVersion() { return "1.1"; } public void load { hogeBlock = new Block(hogeBlockID, 1, Material.rock) ModLoader.registerBlock(hogeBlock); ModLoader.addName(hogeBlockID, "Hoge Block"); hogeItem = new Item(hogeItemID).setItemName("hogeItem"); hogeItem.iconIndex = ModLoader.addOverride("/gui/items.png", "/item/hogeitem.png"); ModLoader.addName(hogeItem, "Hoge Item"); } }
事前準備[編集]
デコンパイルしただけの状態では、info,min,maxを設定しなければリコンパイル時にエラーが発生します。
そこで、これらを設定しなくとも正常にリコンパイルできるよう、MLPropクラスを書き換えます。
ModLoader の 公式フォーラムのページで Modloader - Decompile Fixes の順にたどる
ダウンロードしてきた zip を McRoot\src\minecraft\net\minecraft\src\ に解凍
MLProp.java の 1行目 にあるスラッシュ2つを消して上書き保存
//package net.minecraft.src; …
↓
package net.minecraft.src; …
解説[編集]
@MLProp(info="please assign an ID, hogeBlock", min = 1, max = 255) public static int hogeBlockID = 111; @MLProp public static int hogeItemID = 5000;
- 変更できるようにしたい変数の定義の前に"@MLProp"と記述するだけで設定ファイルから変更可能になります。
- infoを設定することでヘルプ用コメントを表示させることができます。ただし日本語は使えません。
- minで最小値、maxで最大値を設定することができます。範囲外の数値が設定されている場合、初期値に変更されます。
MinecraftForgeの機能を使用した方法[編集]
MinecraftForgeの設定フアイルはModLoaderと以下の様な違いがあります。
・ファイル名、配置パスを変更できる
・ブロックID、アイテムID、その他のカテゴリに分類される
サンプルソース[編集]
package net.minecraft.src; import java.io.File; import java.util.*; import net.minecraft.client.Minecraft; import net.minecraft.src.forge.*; public class mod_hoge extends BaseMod { static Configuration configuration; static Block hogeBlock; static int hogeBlockID; static Item hogeItem; static int itemHogeShiftedIndex; public String getVersion() { return "1.1"; } public void load() { configuration = new Configuration(new File(Minecraft.getMinecraftDir(), "config/hoge.cfg")); hogeBlockID = configurationProperties(); hogeBlock = new Block(hogeBlockID, ModLoader.addOverride("/terrain.png", "/block/hogeBlock.png")); //ItemIDはBlockIDのMAX値256から減算した値がItemIDになるので-256をしています。 hogeItem = new Item(itemHogeShiftedIndex - 256, "/gui/items.png", "/item/hogeItem.png").setItemName("hogeItem"); ModLoader.RegisterBlock(hogeBlock); ModLoader.AddName(hogeBlock, "Hoge Block"); ModLoader.AddName(hogeItem, "Hoge Item"); } public String getVersion() { return "1.0.0"; } private int configurationProperties() { configuration.load(); hogeBlockID = Integer.parseInt(configuration.getOrCreateBlockIdProperty("Hoge Block", 123).value); itemHogeShiftedIndex = Integer.parseInt(configuration.getOrCreateIntProperty("Hoge Item", Configuration.ITEM_PROPERTY, 5000).value); configuration.save(); return hogeBlockID; } }
解説[編集]
configuration = new Configuration(new File(Minecraft.getMinecraftDir(), "config/hoge.cfg")); hogeBlockID = configurationProperties();
configurationファイルを設定します。
FileメソッドでMinecraftのconfig/hoge/cfgファイルを参照することを定義しています。
BlockIDはconfigurationProperties();でコンフィグファイルから取って来いという宣言です。
private int configurationProperties() { configuration.load(); hogeBlockID = Integer.parseInt(configuration.getOrCreateBlockIdProperty("Hoge Block", 123).value); itemHogeShiftedIndex = Integer.parseInt(configuration.getOrCreateIntProperty("Hoge Item", Configuration.ITEM_PROPERTY, 5000).value); configuration.save(); return hogeBlockID; }
configuration.load()でコンフィグファイルをロードします。
2行目でコンフィグファイルで定義されているBlockIDを設定します。
getOrCreateBlockIdPropertyで対象ブロックに設定するものを定義します。
数字123は初期定義値です。
3行目のgetOrCreateIntPropertyでは、前の行のgetOrCreateBlockIdPropertyの項目を使用しています。
数字の5000はhogeItemの初期ItemID(実際のデータは+256)です。
configuration.save();でコンフィングファイルをセーブします。(忘れやすいので注意)
最後に最初のBlockIDを返す必要があります。
java標準の機能だけを使用する方法[編集]
まとめ[編集]
MLPropかForgeでのConfigファイル生成かは好みが分かれると思います。
今回はBlockID、ItemIDを設定させていますが、EntityIDや対象Blockの生成有無の判定にも使えますので、好きな方をお使いください。
cfgファイルが生成されるタイミング[編集]
- ModLoaderを利用した方法の場合
- 基本的にModの読み込みが正常に終了すれば生成されます。
- 逆に言うと競合などが原因でMODの導入に失敗する場合生成されないので、cfgファイルによって競合回避を促す場合には注意が必要です。
- modを導入するにはcfgを書き換える必要があり、cfgを生成するには導入に成功する必要がある矛盾が発生する。
- この問題は、modのzipファイルにデフォルトのcfgファイルを同梱することで解決できます。
- cfgファイルが同梱されていれば、ユーザーは手動でcfgファイルを導入できる。
- 同時に使用IDを配布場所に明記しておくのも有効。IDが既知であれば導入前に競合の有無を判別できる。