5行目: | 5行目: | ||
---- | ---- | ||
+ | {{前提MOD|reqmod="Minecraft ForgeX.X"}} | ||
+ | |||
+ | ==流体辞書の利用== | ||
+ | <p> | ||
+ | 流体辞書(LiquidDictionary)は異なるmod間での流体共有のための機能である. | ||
+ | 流体辞書は4つのクラスLiquidDictionary LiquidStack LiquidContainerRegistryから成り, それぞれ'''辞書''', '''流体データ''', '''容器登録'''を提供する. | ||
+ | なお流体ブロック及びアイテムの具体的なサンプルコードはここでは説明しない. | ||
+ | </p> | ||
+ | |||
+ | ==基本的な使い方== | ||
+ | *流体辞書への登録 | ||
+ | <p> | ||
+ | 流体辞書への登録はLiquidDictionaryクラスのgetOrCreateLiquidメソッドを利用する. | ||
+ | </p> | ||
+ | <source lang = "java"> | ||
+ | LiquidDictionary.getOrCreateLiquid("流体名",new LiquidStack(流体アイテムorブロック, 1000)); | ||
+ | </source> | ||
+ | <p> | ||
+ | すなわち, 流体辞書は'''文字列'''で共有される. 他のmodの流体への参照がなくとも, 文字列を指定しておけば読み込まれたときに自動で関連付けされる. | ||
+ | </p> | ||
+ | <source lang = "java"> | ||
+ | LiquidDictionary.getOrCreateLiquid("流体名",new LiquidStack(流体アイテムorブロック, 1000, メタデータ)); | ||
+ | </source> | ||
+ | <p> | ||
+ | このようにItemStackを用いて登録すればメタデータを利用することで消費IDの抑止にもつながる. 参照の際は文字列だけわかればよいというのも大きなメリットである. | ||
+ | </p> | ||
+ | |||
+ | ==流体辞書を利用した容器の登録== | ||
+ | <p> | ||
+ | 流体辞書を利用した容器を追加する場合, 先述した'''LiquidContainerRegistry'''を利用する. | ||
+ | |||
+ | また、一部Modでは容器へ流体を注入する機能をもつものが容器登録を参照してレシピ登録しているものがある。 | ||
+ | ThermalExpansionの例では@PostInitで処理されるため、@Init処理までに登録する必要がある。 | ||
+ | </p> | ||
+ | <source lang = "java"> | ||
+ | LiquidContainerRegistry.registerLiquid( | ||
+ | new LiquidContainerData( | ||
+ | LiquidDictionary.getLiquid( | ||
+ | "流体名" | ||
+ | , LiquidContainerRegistry.BUCKET_VOLUME ※容量:バケツ1杯=1000) | ||
+ | , new ItemStack(満たされた容器アイテム) | ||
+ | , new ItemStack(空の容器アイテム))); | ||
+ | </source> | ||
+ | <p> | ||
+ | 辞書へ登録された流体のテクスチャ情報は、アイテムやブロックの実装だけでは不十分で、別途辞書への登録データへ | ||
+ | Icon及び、テクスチャパスを登録する必要がある | ||
+ | </p> | ||
+ | |||
+ | <source lang = "java"> | ||
+ | @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 ); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | ==流体辞書に登録する際のルール== | ||
+ | <p> | ||
+ | 現在流体辞書を利用しているのは、液体を扱えるModで、たとえばBulidCraft,FLiquidstry for Minecraft,ThermalExpansion,RailCraft等がある。 | ||
+ | 命名則はForgeがバニラ流体を水:Water、溶岩:Lavaと登録しているのに倣ってか、そのまの名前で登録されているものが多い。 | ||
+ | 一部Mod(主にgregTechAddon)では fluid,gas,plasma を流体辞書と同様にprefixとして使用して登録している。 | ||
+ | </p> | ||
+ | BuildCraft | ||
+ | *Oil | ||
+ | *Fuel | ||
+ | |||
+ | Railcraft | ||
+ | *Creosote Oil | ||
+ | *Steam | ||
+ | |||
+ | ThermalExpansion(※先頭が小文字 | ||
+ | *redstone | ||
+ | *glowstone | ||
+ | *ender | ||
+ | |||
+ | etc.. |
2013年6月18日 (火) 07:00時点における版
このページは投稿・編集の練習用です。
自由に変更して頂いて構いませんが、不定期に内容は削除されますのでメモ代わりには使用しないで下さい。
この記事は"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, メタデータ));
このようにItemStackを用いて登録すればメタデータを利用することで消費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として使用して登録している。
BuildCraft
- Oil
- Fuel
Railcraft
- Creosote Oil
- Steam
ThermalExpansion(※先頭が小文字
- redstone
- glowstone
- ender
etc..