Takanasayo (トーク | 投稿記録) 細 (カテゴリの追加) |
|||
(4人の利用者による、間の10版が非表示) | |||
1行目: | 1行目: | ||
− | {{前提MOD|reqmod=" | + | {{前提MOD|reqmod="ModLoader1.2.3以降"}} |
− | + | 設定ファイルの生成方法は3種類あり、それぞれ使い勝手が違います。<br/> | |
− | |||
− | |||
− | + | =ModLoaderの機能を使用した方法= | |
− | |||
− | + | 最も簡単な方法ですが、後述の事前準備が必要となります。<br/> | |
− | === | + | ==サンプルソース== |
+ | |||
+ | <source lang="java"> | ||
+ | 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"); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | ==事前準備== | ||
+ | <br /> | ||
+ | デコンパイルしただけの状態では、info,min,maxを設定しなければリコンパイル時にエラーが発生します。<br /> | ||
+ | そこで、これらを設定しなくとも正常にリコンパイルできるよう、MLPropクラスを書き換えます。<br /> | ||
+ | <br /> | ||
+ | ModLoader の 公式フォーラムのページで Modloader - Decompile Fixes の順にたどる<br /> | ||
+ | ダウンロードしてきた zip を McRoot\src\minecraft\net\minecraft\src\ に解凍<br /> | ||
+ | MLProp.java の 1行目 にあるスラッシュ2つを消して上書き保存<br /> | ||
+ | <source lang="java"> | ||
+ | //package net.minecraft.src; | ||
+ | … | ||
+ | </source> | ||
+ | '''↓''' | ||
+ | <source lang="java"> | ||
+ | package net.minecraft.src; | ||
+ | … | ||
+ | </source> | ||
+ | |||
+ | ==解説== | ||
+ | <source lang="java"> | ||
+ | @MLProp(info="please assign an ID, hogeBlock", min = 1, max = 255) | ||
+ | public static int hogeBlockID = 111; | ||
+ | @MLProp | ||
+ | public static int hogeItemID = 5000; | ||
+ | </source> | ||
+ | *変更できるようにしたい変数の定義の前に"@MLProp"と記述するだけで設定ファイルから変更可能になります。 | ||
+ | *infoを設定することでヘルプ用コメントを表示させることができます。ただし日本語は使えません。 | ||
+ | *minで最小値、maxで最大値を設定することができます。範囲外の数値が設定されている場合、初期値に変更されます。 | ||
+ | |||
+ | =MinecraftForgeの機能を使用した方法= | ||
+ | |||
+ | MinecraftForgeの設定フアイルはModLoaderと以下の様な違いがあります。<br/> | ||
+ | ・ファイル名、配置パスを変更できる<br/> | ||
+ | ・ブロックID、アイテムID、その他のカテゴリに分類される<br/> | ||
+ | |||
+ | ==サンプルソース== | ||
<source lang="java"> | <source lang="java"> | ||
21行目: | 85行目: | ||
public class mod_hoge extends BaseMod | public class mod_hoge extends BaseMod | ||
{ | { | ||
− | + | static Configuration configuration; | |
− | + | static Block hogeBlock; | |
− | + | static int hogeBlockID; | |
− | + | static Item hogeItem; | |
− | + | static int itemHogeShiftedIndex; | |
− | + | ||
− | public | + | 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; | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
</source> | </source> | ||
+ | ==解説== | ||
+ | <source lang="java"> | ||
+ | configuration = new Configuration(new File(Minecraft.getMinecraftDir(), "config/hoge.cfg")); | ||
+ | hogeBlockID = configurationProperties(); | ||
+ | </source> | ||
+ | configurationファイルを設定します。<br/> | ||
+ | FileメソッドでMinecraftのconfig/hoge/cfgファイルを参照することを定義しています。<br/> | ||
+ | BlockIDはconfigurationProperties();でコンフィグファイルから取って来いという宣言です。<br/> | ||
+ | <source lang="java"> | ||
+ | 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; | ||
+ | } | ||
+ | </source> | ||
+ | configuration.load()でコンフィグファイルをロードします。<br/> | ||
+ | 2行目でコンフィグファイルで定義されているBlockIDを設定します。<br/> | ||
+ | getOrCreateBlockIdPropertyで対象ブロックに設定するものを定義します。<br/> | ||
+ | 数字123は初期定義値です。<br/> | ||
+ | 3行目のgetOrCreateIntPropertyでは、前の行のgetOrCreateBlockIdPropertyの項目を使用しています。<br/> | ||
+ | 数字の5000はhogeItemの初期ItemID(実際のデータは+256)です。<br/> | ||
+ | configuration.save();でコンフィングファイルをセーブします。(忘れやすいので注意)<br/> | ||
+ | 最後に最初のBlockIDを返す必要があります。<br/> | ||
+ | |||
+ | =java標準の機能だけを使用する方法= | ||
+ | |||
+ | =まとめ= | ||
+ | MLPropかForgeでのConfigファイル生成かは好みが分かれると思います。<br/> | ||
+ | 今回はBlockID、ItemIDを設定させていますが、EntityIDや対象Blockの生成有無の判定にも使えますので、好きな方をお使いください。 | ||
− | + | ==cfgファイルが生成されるタイミング== | |
− | + | ;ModLoaderを利用した方法の場合 | |
− | + | *基本的にModの読み込みが正常に終了すれば生成されます。 | |
− | + | *逆に言うと競合などが原因でMODの導入に失敗する場合生成されないので、cfgファイルによって競合回避を促す場合には注意が必要です。 | |
+ | **modを導入するにはcfgを書き換える必要があり、cfgを生成するには導入に成功する必要がある矛盾が発生する。 | ||
+ | *この問題は、modのzipファイルにデフォルトのcfgファイルを同梱することで解決できます。 | ||
+ | **cfgファイルが同梱されていれば、ユーザーは手動でcfgファイルを導入できる。 | ||
+ | **同時に使用IDを配布場所に明記しておくのも有効。IDが既知であれば導入前に競合の有無を判別できる。 | ||
− | + | [[category:その他]] |
2012年10月25日 (木) 18:15時点における最新版
この記事は"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が既知であれば導入前に競合の有無を判別できる。