最新版 |
編集中の文章 |
1行目: |
1行目: |
− | {{前提MOD|reqmod="ModLoader1.2.3以降"}} | + | このページは<br/> |
− | 設定ファイルの生成方法は3種類あり、それぞれ使い勝手が違います。<br/>
| + | ・ModLoader<br/> |
| + | ・MinecraftForge<br/> |
| + | を使っていることを前提に書かれています。<br/>{{前提MOD|reqmod=ModLoader及びMinecraftForge}} |
| | | |
− | =ModLoaderの機能を使用した方法=
| + | MLPropを使う場合は、ModLoaderAPIに記載してありますのでそちらを確認ください。 |
| | | |
− | 最も簡単な方法ですが、後述の事前準備が必要となります。<br/>
| |
| | | |
− | ==サンプルソース==
| + | 作成するクラス<br/> |
| + | mod_hoge<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/>
| |
| | | |
− | ==サンプルソース== | + | ===mod_hogeクラス作成=== |
| | | |
| <source lang="java"> | | <source lang="java"> |
| package net.minecraft.src; | | package net.minecraft.src; |
| | | |
− | import java.io.File;
| |
| import java.util.*; | | import java.util.*; |
| import net.minecraft.client.Minecraft; | | import net.minecraft.client.Minecraft; |
| import net.minecraft.src.forge.*; | | import net.minecraft.src.forge.*; |
| | | |
− | public class mod_hoge extends BaseMod | + | public class mod_CamelOre extends BaseMod |
| { | | { |
− | static Configuration configuration;
| + | static Configuration configuration |
− | static Block hogeBlock;
| + | static Block hogeBlock; |
− | static int hogeBlockID;
| + | static int hogeBlockID; |
− | static Item hogeItem;
| + | |
− | static int itemHogeShiftedIndex;
| + | public mod_CamelOre() |
| + | { |
| + | } |
| + | |
| + | public void load() |
| + | { |
| + | congiguration = new Configuration(new File(Minecraft.getMinecraftDir(), "config/hoge.cfg")); |
| + | hogeBlockID = configrationProperties(); |
| + | ModLoader.RegisterBlock(hogeBlock); |
| + | ModLoader.AddName(hogeBlock, "Hoge Block"); |
| + | } |
| | | |
| public String getVersion() | | public String getVersion() |
| { | | { |
− | return "1.1"; | + | return "1.0.0"; |
| } | | } |
− |
| |
− | 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:その他]]
| |