設定ファイルの生成方法は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 hogeBlockID = 111; @MLProp public static 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"); } }
解説
@MLProp(info="please assign an ID, hogeBlock", min = 1, max = 255) public static hogeBlockID = 111; @MLProp public static hogeItemID = 5000;
変更できるようにしたい変数の定義の前に"@MLProp"と記述するだけで設定ファイルから変更可能になります。
その際、infoを設定することでヘルプ用コメントを表示させることができます。
また、同じようにしてminで最小値、maxで最大値を設定することができます。
範囲外の数値が設定されている場合、初期値に変更されます。
事前準備
デコンパイルしただけの状態では、info,min,maxを設定しなければリコンパイル時にエラーが発生します。
そこで、これらを設定しなくとも正常にリコンパイルできるよう、MLPropクラスを書き換えます。
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の生成有無の判定にも使えますので、好きな方をお使いください。
コメントの自動更新を有効化