提供: Minecraft Modding Wiki
移動先: 案内検索
(マークアップの最適化)
 
(2人の利用者による、間の3版が非表示)
1行目: 1行目:
{{前提MOD|reqmod="Minecraft Forge4.3x"}}
+
{{前提MOD|reqmod="Minecraft Forge4.3.x"}}
  
 
==Forge式コンフィグファイルの利用==
 
==Forge式コンフィグファイルの利用==
 +
<p>
 
[[無機能アイテムの追加]]と[[無機能ブロックの追加]]ではアイテムIDとブロックIDは変更不可能だった. そこでModLoaderのMLPropよりも柔軟な(ただし複雑な)コンフィグファイルを利用する.
 
[[無機能アイテムの追加]]と[[無機能ブロックの追加]]ではアイテムIDとブロックIDは変更不可能だった. そこでModLoaderのMLPropよりも柔軟な(ただし複雑な)コンフィグファイルを利用する.
 
なお, 上記2つのコードで説明した箇所は説明を省いている.
 
なお, 上記2つのコードで説明した箇所は説明を省いている.
 +
</p>
  
ソースコード
+
==ソースコード==
*ConfigSampleCore.java
+
;ConfigSampleCore.java
 
<source lang = "java">
 
<source lang = "java">
 
package mods.configsample;
 
package mods.configsample;
103行目: 105行目:
  
 
==解説==
 
==解説==
===package, import===
+
;ConfigSampleCoreクラス
 
<source lang = "java">
 
<source lang = "java">
 
import java.util.logging.Level;
 
import java.util.logging.Level;
 
</source>
 
</source>
 
:後述のFMLLogで利用するクラス.
 
:後述のFMLLogで利用するクラス.
<br/>
+
 
  
 
<source lang = "java">
 
<source lang = "java">
115行目: 117行目:
 
</source>
 
</source>
 
:Forge式コンフィグファイルの機能を提供するAPI. コンフィグ自体はConfigurationクラスが行い, Propertyクラスは設定項目のコメントや実体を扱う.
 
:Forge式コンフィグファイルの機能を提供するAPI. コンフィグ自体はConfigurationクラスが行い, Propertyクラスは設定項目のコメントや実体を扱う.
<br/>
+
 
  
 
<source lang = "java">
 
<source lang = "java">
121行目: 123行目:
 
</source>
 
</source>
 
:FML(ForgeModLoader)が提供するログ表示用API. 開発環境でのプロンプト画面に表示される他, 実行ログにも記録されるようになる.
 
:FML(ForgeModLoader)が提供するログ表示用API. 開発環境でのプロンプト画面に表示される他, 実行ログにも記録されるようになる.
<br/>
+
 
  
 
<source lang = "java">
 
<source lang = "java">
127行目: 129行目:
 
</source>
 
</source>
 
:ModLoaderにはなかった前処理(pre init)を行うためのイベント. 基本的な使い方はFMLInitializationEventと同じ.
 
:ModLoaderにはなかった前処理(pre init)を行うためのイベント. 基本的な使い方はFMLInitializationEventと同じ.
<br/>
+
 
  
 
<source lang = "java">
 
<source lang = "java">
134行目: 136行目:
 
</source>
 
</source>
 
:以前解説したItemSampleクラスとBlockSampleクラスを利用するため, インポートする. 同パッケージ内で作成している場合, このimport文は不要.
 
:以前解説したItemSampleクラスとBlockSampleクラスを利用するため, インポートする. 同パッケージ内で作成している場合, このimport文は不要.
<br/>
 
  
===ConfigSampleCoreクラスのpreInitメソッド===
+
 
 
<source lang = "java">
 
<source lang = "java">
 
@Mod.PreInit
 
@Mod.PreInit
162行目: 163行目:
 
}
 
}
 
</source>
 
</source>
 +
:@Mod.Initと同様に, @Mod.PreInitアノテーションを付与し, 引数にFMLPreInitializationEventを指定すると前処理専用のメソッドとなる. 基本的にはコンフィグファイルの生成や, コンフィグファイルから値を持ってくる処理を行う.
  
@Mod.Initと同様に, @Mod.PreInitアノテーションを付与し, 引数にFMLPreInitializationEventを指定すると前処理専用のメソッドとなる. 基本的にはコンフィグファイルの生成や, コンフィグファイルから値を持ってくる処理を行う.
 
<br/>
 
  
 
<source lang = "java">
 
<source lang = "java">
170行目: 170行目:
 
</source>
 
</source>
 
:Configurationのインスタンスを作成する. 引数のevent.getSuggestedConfigurationFile()は, @Modで指定したmodid.cfg(この場合はConfigSampleCore.cfg)というファイルオブジェクトを返す.
 
:Configurationのインスタンスを作成する. 引数のevent.getSuggestedConfigurationFile()は, @Modで指定したmodid.cfg(この場合はConfigSampleCore.cfg)というファイルオブジェクトを返す.
<br/>
+
 
  
 
<source lang = "java">
 
<source lang = "java">
176行目: 176行目:
 
</source>
 
</source>
 
:Configurationの処理を開始させるメソッド. 必ずsave()と対になる.
 
:Configurationの処理を開始させるメソッド. 必ずsave()と対になる.
<br/>
+
 
  
 
<source lang = "java">
 
<source lang = "java">
184行目: 184行目:
 
:コンフィグファイルに項目とデフォルト値を設定し, その要素をPropetryインスタンスに返す処理.
 
:コンフィグファイルに項目とデフォルト値を設定し, その要素をPropetryインスタンスに返す処理.
 
:この時, このModよりも前に読み込まれたModのブロック, アイテムIDと重複していた場合, '''自動でIDの末尾からIDの再割り当てを行う.'''
 
:この時, このModよりも前に読み込まれたModのブロック, アイテムIDと重複していた場合, '''自動でIDの末尾からIDの再割り当てを行う.'''
<br/>
+
 
  
 
<source lang = "java">
 
<source lang = "java">
191行目: 191行目:
 
</source>
 
</source>
 
:コンフィグファイルでの項目に対するコメント.
 
:コンフィグファイルでの項目に対するコメント.
<br/>
+
 
  
 
<source lang = "java">
 
<source lang = "java">
199行目: 199行目:
 
:コンフィグファイルで設定した値をint型にして取得するメソッド.
 
:コンフィグファイルで設定した値をint型にして取得するメソッド.
 
:アイテムIDに関しては自動で-256してくれるようになった. これは4.1.4.281からの機能.
 
:アイテムIDに関しては自動で-256してくれるようになった. これは4.1.4.281からの機能.
 +
  
 
<source lang = "java">
 
<source lang = "java">
207行目: 208行目:
 
</source>
 
</source>
 
:ファイルへの書き込み, 読み込みが失敗したときに呼ばれる, 例外. ログファイルにエラーメッセージを出力し, ゲームを強制終了させる.
 
:ファイルへの書き込み, 読み込みが失敗したときに呼ばれる, 例外. ログファイルにエラーメッセージを出力し, ゲームを強制終了させる.
<br/>
+
 
  
 
<source lang = "java">
 
<source lang = "java">
215行目: 216行目:
 
}
 
}
 
</source>
 
</source>
:tryで例外が発生しない場合呼ばれる. コンフィグファイルを保存する.
+
:tryブロックの後で必ず呼ばれる. コンフィグファイルを保存する.
  
 
==実際の挙動==
 
==実際の挙動==
 +
<p>
 
実際の挙動自体は[[無機能アイテムの追加]], [[無機能ブロックの追加]]とほぼ同じである. ただしconfigフォルダに'''ConfigSampleCore.cfg'''というファイルが生成されている.
 
実際の挙動自体は[[無機能アイテムの追加]], [[無機能ブロックの追加]]とほぼ同じである. ただしconfigフォルダに'''ConfigSampleCore.cfg'''というファイルが生成されている.
 +
</p>

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というファイルが生成されている.