提供: Minecraft Modding Wiki
移動先: 案内検索

この記事は"Minecraft ForgeX.X"を前提MODとしています。

液体辞書の利用

液体辞書(LiquidDictionary)は異なるmod間での流体共有のための機能である. 液体辞書は4つのクラスLiquidDictionary LiquidStack LiquidContainerRegistryから成り, それぞれ辞書, 液体データ, 容器登録を提供する. なお流体ブロック及びアイテムの具体的なサンプルコードはここでは説明しない.

基本的な使い方

  • 液体辞書への登録

液体辞書への登録はLiquidDictionaryクラスのgetOrCreateLiquidメソッドを利用する.

LiquidDictionary.getOrCreateLiquid("液体名",new LiquidStack(液体アイテムorブロック, 1000));

 すなわち, 液体辞書は文字列で共有される. 他のmodの液体への参照がなくとも, 文字列を指定しておけば読み込まれたときに自動で関連付けされる.

LiquidDictionary.getOrCreateLiquid("液体名",new LiquidStack(液体アイテムorブロック, 1000, メタデータ));

 このようにメタデータを利用することで消費IDの抑止にもつながる. 参照の際は文字列だけわかればよいというのも大きなメリットである.

液体辞書を利用した容器の登録

液体辞書を利用した容器を追加する場合, 先述したLiquidContainerRegistryを利用する. また、一部Modでは容器へ液体を注入する機能をもつものが容器登録を参照してレシピ登録しているものがある。 ThermalExpansionの例では@PostInitで処理されるため、@Init処理までに登録する必要がある。

LiquidContainerRegistry.registerLiquid(
		new LiquidContainerData(
		        LiquidDictionary.getLiquid(
					"液体名"
					, LiquidContainerRegistry.BUCKET_VOLUME ※容量:バケツ1杯=1000)
				, new ItemStack(満たされた容器アイテム)
				, new ItemStack(空の容器アイテム)));

 辞書へ登録された液体のテクスチャ情報は、アイテムやブロックの実装だけでは不十分で、別途辞書への登録データへ Icon及び、テクスチャパスを登録する必要がある

@PreInit
	public void preInit(FMLPreInitializationEvent evt) {
        //TextureHook.Postイベントを登録するひつようがある。
		MinecraftForge.EVENT_BUS.register(this);
	}
	
	@ForgeSubscribe
	@SideOnly(Side.CLIENT)
	public void textureHook(TextureStitchEvent.Post event) {

		String targetTexture = 
			event.map == Minecraft.getMinecraft().renderEngine.textureMapItems 
				? "/gui/items.png" 
				: "/terrain.png";

		LiquidStack ls = LiquidDictionary.getCanonicalLiquid("流体名");
		if(ls != null){
			ls.setRenderingIcon(ls.asItemStack().getIconIndex());
			ls.setTextureSheet(targetTexture );
		}
	}

液体辞書に登録する際のルール

現在液体辞書を利用しているのは、液体を扱えるModで、たとえばBulidCraft,FLiquidstry for Minecraft,ThermalExpansion,RailCraft等がある。 命名則はForgeがバニラ流体を水:Water、溶岩:Lavaと登録しているのに倣ってか、そのままの名前で登録されているものが多い。 一部Mod(主にgregTechAddon)では fluid,gas,plasma を液体辞書と同様にprefixとして使用して登録している。