提供: Minecraft Modding Wiki
(finallyが間違ってたのを修正) |
Takanasayo (トーク | 投稿記録) 細 (マークアップの最適化) |
||
1行目: | 1行目: | ||
− | {{前提MOD|reqmod="Minecraft Forge4. | + | {{前提MOD|reqmod="Minecraft Forge4.3.x"}} |
==Forge式コンフィグファイルの利用== | ==Forge式コンフィグファイルの利用== | ||
7行目: | 7行目: | ||
</p> | </p> | ||
− | + | ==ソースコード== | |
− | + | ;ConfigSampleCore.java | |
<source lang = "java"> | <source lang = "java"> | ||
package mods.configsample; | package mods.configsample; | ||
105行目: | 105行目: | ||
==解説== | ==解説== | ||
− | + | ;ConfigSampleCoreクラス | |
<source lang = "java"> | <source lang = "java"> | ||
import java.util.logging.Level; | import java.util.logging.Level; | ||
</source> | </source> | ||
− | + | :後述のFMLLogで利用するクラス. | |
− | 後述のFMLLogで利用するクラス. | ||
− | |||
118行目: | 116行目: | ||
import net.minecraftforge.common.Property; | import net.minecraftforge.common.Property; | ||
</source> | </source> | ||
− | + | :Forge式コンフィグファイルの機能を提供するAPI. コンフィグ自体はConfigurationクラスが行い, Propertyクラスは設定項目のコメントや実体を扱う. | |
− | Forge式コンフィグファイルの機能を提供するAPI. コンフィグ自体はConfigurationクラスが行い, Propertyクラスは設定項目のコメントや実体を扱う. | ||
− | |||
126行目: | 122行目: | ||
import cpw.mods.fml.common.FMLLog; | import cpw.mods.fml.common.FMLLog; | ||
</source> | </source> | ||
− | + | :FML(ForgeModLoader)が提供するログ表示用API. 開発環境でのプロンプト画面に表示される他, 実行ログにも記録されるようになる. | |
− | FML(ForgeModLoader)が提供するログ表示用API. 開発環境でのプロンプト画面に表示される他, 実行ログにも記録されるようになる. | ||
− | |||
134行目: | 128行目: | ||
import cpw.mods.fml.common.event.FMLPreInitializationEvent; | import cpw.mods.fml.common.event.FMLPreInitializationEvent; | ||
</source> | </source> | ||
− | + | :ModLoaderにはなかった前処理(pre init)を行うためのイベント. 基本的な使い方はFMLInitializationEventと同じ. | |
− | ModLoaderにはなかった前処理(pre init)を行うためのイベント. 基本的な使い方はFMLInitializationEventと同じ. | ||
− | |||
143行目: | 135行目: | ||
import mods.blocksample.BlockSample; | import mods.blocksample.BlockSample; | ||
</source> | </source> | ||
− | + | :以前解説したItemSampleクラスとBlockSampleクラスを利用するため, インポートする. 同パッケージ内で作成している場合, このimport文は不要. | |
− | 以前解説したItemSampleクラスとBlockSampleクラスを利用するため, インポートする. 同パッケージ内で作成している場合, このimport文は不要. | ||
− | |||
173行目: | 163行目: | ||
} | } | ||
</source> | </source> | ||
− | + | :@Mod.Initと同様に, @Mod.PreInitアノテーションを付与し, 引数にFMLPreInitializationEventを指定すると前処理専用のメソッドとなる. 基本的にはコンフィグファイルの生成や, コンフィグファイルから値を持ってくる処理を行う. | |
− | @Mod.Initと同様に, @Mod.PreInitアノテーションを付与し, 引数にFMLPreInitializationEventを指定すると前処理専用のメソッドとなる. 基本的にはコンフィグファイルの生成や, コンフィグファイルから値を持ってくる処理を行う. | ||
− | |||
181行目: | 169行目: | ||
Configuration cfg = new Configuration(event.getSuggestedConfigurationFile()); | Configuration cfg = new Configuration(event.getSuggestedConfigurationFile()); | ||
</source> | </source> | ||
− | + | :Configurationのインスタンスを作成する. 引数のevent.getSuggestedConfigurationFile()は, @Modで指定したmodid.cfg(この場合はConfigSampleCore.cfg)というファイルオブジェクトを返す. | |
− | Configurationのインスタンスを作成する. 引数のevent.getSuggestedConfigurationFile()は, @Modで指定したmodid.cfg(この場合はConfigSampleCore.cfg)というファイルオブジェクトを返す. | ||
− | |||
189行目: | 175行目: | ||
cfg.load(); | cfg.load(); | ||
</source> | </source> | ||
− | + | :Configurationの処理を開始させるメソッド. 必ずsave()と対になる. | |
− | Configurationの処理を開始させるメソッド. 必ずsave()と対になる. | ||
− | |||
198行目: | 182行目: | ||
Property itemProp = cfg.getItem("ConfigSampleItem", 4001); | Property itemProp = cfg.getItem("ConfigSampleItem", 4001); | ||
</source> | </source> | ||
− | + | :コンフィグファイルに項目とデフォルト値を設定し, その要素をPropetryインスタンスに返す処理. | |
− | コンフィグファイルに項目とデフォルト値を設定し, その要素をPropetryインスタンスに返す処理. | + | :この時, このModよりも前に読み込まれたModのブロック, アイテムIDと重複していた場合, '''自動でIDの末尾からIDの再割り当てを行う.''' |
− | この時, このModよりも前に読み込まれたModのブロック, アイテムIDと重複していた場合, '''自動でIDの末尾からIDの再割り当てを行う.''' | ||
− | |||
208行目: | 190行目: | ||
itemProp.comment = "This comment is Item Property"; | itemProp.comment = "This comment is Item Property"; | ||
</source> | </source> | ||
− | + | :コンフィグファイルでの項目に対するコメント. | |
− | コンフィグファイルでの項目に対するコメント. | ||
− | |||
217行目: | 197行目: | ||
itemIdSample = itemProp.getInt(); | itemIdSample = itemProp.getInt(); | ||
</source> | </source> | ||
− | + | :コンフィグファイルで設定した値をint型にして取得するメソッド. | |
− | コンフィグファイルで設定した値をint型にして取得するメソッド. | + | :アイテムIDに関しては自動で-256してくれるようになった. これは4.1.4.281からの機能. |
− | アイテムIDに関しては自動で-256してくれるようになった. これは4.1.4.281からの機能. | ||
− | |||
229行目: | 207行目: | ||
} | } | ||
</source> | </source> | ||
− | + | :ファイルへの書き込み, 読み込みが失敗したときに呼ばれる, 例外. ログファイルにエラーメッセージを出力し, ゲームを強制終了させる. | |
− | ファイルへの書き込み, 読み込みが失敗したときに呼ばれる, 例外. ログファイルにエラーメッセージを出力し, ゲームを強制終了させる. | ||
− | |||
240行目: | 216行目: | ||
} | } | ||
</source> | </source> | ||
− | + | :tryブロックの後で必ず呼ばれる. コンフィグファイルを保存する. | |
− | tryブロックの後で必ず呼ばれる. コンフィグファイルを保存する. | ||
− | |||
==実際の挙動== | ==実際の挙動== |
2012年11月3日 (土) 08:01時点における最新版
この記事は"Minecraft Forge4.3.x"を前提MODとしています。 |
Forge式コンフィグファイルの利用[編集]
無機能アイテムの追加と無機能ブロックの追加ではアイテムIDとブロックIDは変更不可能だった. そこでModLoaderのMLPropよりも柔軟な(ただし複雑な)コンフィグファイルを利用する. なお, 上記2つのコードで説明した箇所は説明を省いている.
ソースコード[編集]
- ConfigSampleCore.java
package mods.configsample; import java.util.logging.Level; import net.minecraft.src.*; import net.minecraftforge.common.Configuration; import net.minecraftforge.common.Property; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; import mods.itemsample.ItemSample; import mods.blocksample.BlockSample; @Mod( modid = "ConfigSampleMod", name = "Config Sample Mod", version = "1.0.0" ) @NetworkMod( clientSideRequired = true, serverSideRequired = false ) public class ConfigSampleCore { public static Block blockSample; public static Item itemSample; public int blockIdSample; public int itemIdSample; @Mod.PreInit public void preInit(FMLPreInitializationEvent event) { Configuration cfg = new Configuration(event.getSuggestedConfigurationFile()); try { cfg.load(); Property blockProp = cfg.getBlock("ConfigSampleBlock", 1301); Property itemProp = cfg.getItem("ConfigSampleItem", 4001); blockProp.comment = "This comment is Block Property"; itemProp.comment = "This comment is Item Property"; blockIdSample = blockProp.getInt(); itemIdSample = itemProp.getInt(); } catch (Exception e) { FMLLog.log(Level.SEVERE, e, "Error Message"); } finally { cfg.save(); } } @Mod.Init public void init(FMLInitializationEvent event) { blockSample = (new BlockSample(blockIdSample, 4)).setBlockName("configsampleblock").setCreativeTab(CreativeTabs.tabBlock); itemSample = (new ItemSample(itemIdSample)).setIconCoord(10, 0).setItemName("configsampleitem").setCreativeTab(CreativeTabs.tabMaterials); GameRegistry.registerBlock(blockSample); LanguageRegistry.addName(blockSample, "Config Sample Block"); LanguageRegistry.instance().addNameForObject(blockSample, "ja_JP", "コンフィグサンプルブロック"); LanguageRegistry.addName(itemSample, "Config Sample Item"); LanguageRegistry.instance().addNameForObject(itemSample, "ja_JP", "コンフィグサンプルアイテム"); GameRegistry.addShapelessRecipe( new ItemStack(itemSample, 1), new Object[] { Block.dirt, Block.dirt, Block.dirt }); GameRegistry.addShapelessRecipe( new ItemStack(blockSample, 1), new Object[] { Block.dirt, Block.dirt, Block.dirt, Block.dirt }); } }
解説[編集]
- ConfigSampleCoreクラス
import java.util.logging.Level;
- 後述のFMLLogで利用するクラス.
import net.minecraftforge.common.Configuration; import net.minecraftforge.common.Property;
- Forge式コンフィグファイルの機能を提供するAPI. コンフィグ自体はConfigurationクラスが行い, Propertyクラスは設定項目のコメントや実体を扱う.
import cpw.mods.fml.common.FMLLog;
- FML(ForgeModLoader)が提供するログ表示用API. 開発環境でのプロンプト画面に表示される他, 実行ログにも記録されるようになる.
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
- ModLoaderにはなかった前処理(pre init)を行うためのイベント. 基本的な使い方はFMLInitializationEventと同じ.
import mods.itemsample.ItemSample; import mods.blocksample.BlockSample;
- 以前解説したItemSampleクラスとBlockSampleクラスを利用するため, インポートする. 同パッケージ内で作成している場合, このimport文は不要.
@Mod.PreInit public void preInit(FMLPreInitializationEvent event) { Configuration cfg = new Configuration(event.getSuggestedConfigurationFile()); try { cfg.load(); Property blockProp = cfg.getBlock("ConfigSampleBlock", 1301); Property itemProp = cfg.getItem("ConfigSampleItem", 4001); blockProp.comment = "This comment is Block Property"; itemProp.comment = "This comment is Item Property"; blockIdSample = blockProp.getInt(); itemIdSample = itemProp.getInt(); } catch (Exception e) { FMLLog.log(Level.SEVERE, e, "Error Message"); } finally { cfg.save(); } }
- @Mod.Initと同様に, @Mod.PreInitアノテーションを付与し, 引数にFMLPreInitializationEventを指定すると前処理専用のメソッドとなる. 基本的にはコンフィグファイルの生成や, コンフィグファイルから値を持ってくる処理を行う.
Configuration cfg = new Configuration(event.getSuggestedConfigurationFile());
- Configurationのインスタンスを作成する. 引数のevent.getSuggestedConfigurationFile()は, @Modで指定したmodid.cfg(この場合はConfigSampleCore.cfg)というファイルオブジェクトを返す.
cfg.load();
- Configurationの処理を開始させるメソッド. 必ずsave()と対になる.
Property blockProp = cfg.getBlock("ConfigSampleBlock", 1301); Property itemProp = cfg.getItem("ConfigSampleItem", 4001);
- コンフィグファイルに項目とデフォルト値を設定し, その要素をPropetryインスタンスに返す処理.
- この時, このModよりも前に読み込まれたModのブロック, アイテムIDと重複していた場合, 自動でIDの末尾からIDの再割り当てを行う.
blockProp.comment = "This comment is Block Property"; itemProp.comment = "This comment is Item Property";
- コンフィグファイルでの項目に対するコメント.
blockIdSample = blockProp.getInt(); itemIdSample = itemProp.getInt();
- コンフィグファイルで設定した値をint型にして取得するメソッド.
- アイテムIDに関しては自動で-256してくれるようになった. これは4.1.4.281からの機能.
catch (Exception e) { FMLLog.log(Level.SEVERE, e, "Error Message"); }
- ファイルへの書き込み, 読み込みが失敗したときに呼ばれる, 例外. ログファイルにエラーメッセージを出力し, ゲームを強制終了させる.
finally { cfg.save(); }
- tryブロックの後で必ず呼ばれる. コンフィグファイルを保存する.
実際の挙動[編集]
実際の挙動自体は無機能アイテムの追加, 無機能ブロックの追加とほぼ同じである. ただしconfigフォルダにConfigSampleCore.cfgというファイルが生成されている.