提供: Minecraft Modding Wiki
移動先: 案内検索
(ページの置換「 このページは投稿・編集の練習用です。<br /> 自由に変更して頂いて構いませんが、不定期に内容は削除されますのでメモ代わ...」)
4行目: 4行目:
 
自由に変更して頂いて構いませんが、不定期に内容は削除されますのでメモ代わりには使用しないで下さい。<br />
 
自由に変更して頂いて構いませんが、不定期に内容は削除されますのでメモ代わりには使用しないで下さい。<br />
  
流体辞書ちゅーと案作成、よさそうならページ切って本番追加してくれると嬉しいなぁ。<br />
+
{{前提MOD|reqmod="Minecraft Forge Universal 9.10.0.xxx~"}}
移動したので削除しました。
+
 
----
+
==流体の追加==
 +
<p>流体追加のチュートリアルです。<br />
 +
このチュートリアルで追加した流体は流体APIをサポートする他のMODで扱うことが出来る可能性があります。</p>
 +
 
 +
===ソースコード===
 +
*SampleFluid.java
 +
<source lang = "java">
 +
package mods.samplefluid;
 +
 
 +
import net.minecraft.item.Item;
 +
import net.minecraftforge.fluids.Fluid;
 +
import net.minecraftforge.fluids.FluidRegistry;
 +
import cpw.mods.fml.common.Mod;
 +
import cpw.mods.fml.common.Mod.Instance;
 +
import cpw.mods.fml.common.event.FMLInitializationEvent;
 +
import cpw.mods.fml.common.registry.GameRegistry;
 +
import cpw.mods.fml.common.registry.LanguageRegistry;
 +
 
 +
@Mod(modid="samplefluid.SampleFluid", name="SampleFluid", version="1.0")
 +
public class SampleFluid {
 +
 
 +
//容器入り流体のアイテムID
 +
public static int sampleFluidID = 28000;
 +
    //容器入り流体アイテム
 +
public static Item itemSampleFluid;
 +
 
 +
    //流体クラス
 +
public static Fluid sampleFluid ;
 +
 
 +
    //ドメイン名
 +
    //他mod等との競合を避けるための識別用の名前です。 ※英数字小文字 及び "." 等が使えます。大文字や"/"は使えません。
 +
public static final String DOMAIN_NAME = "samplefluid";
 +
 
 +
@Instance("SampleFluid")
 +
        protected static SampleFluid instance;
 +
   
 +
    @EventHandler
 +
public void preInit(FMLPreInitializationEvent evt) {
 +
        //TextureStitchEvent.Preイベントのためにイベントバスに登録します。
 +
MinecraftForge.EVENT_BUS.register(this);
 +
}
 +
 +
@EventHandler
 +
public void load(FMLInitializationEvent event) {
 +
 
 +
sampleFluid = new Fluid("LiquidSample");//Fluidクラスのインスタンスを生成
 +
FluidRegistry.registerFluid(sampleFluid);
 +
 +
        //容器入り流体の登録です。
 +
        //通常のアイテム作成と同様なので省略します。
 +
        //バケツのような動作には別途実装が必要です。
 +
itemSampleFluid = new Item(sampleFluidID)
 +
        .setUnlocalizedName(DOMAIN_NAME + ".liquidSample") //内部アイテム名の登録
 +
        //テクスチャ名の登録 func_111206_dはForgeバージョンによって名称が変わることがあります。
 +
        //assets/samplefluid/textures/item/bottoledLiquidSample.png が必要です。
 +
        .func_111206_d(DOMAIN_NAME + ":bottled" + sampleFluid.getName());
 +
       
 +
    ItemStack filledContainer = new ItemStack(itemSampleFluid);
 +
FluidContainerRegistry.registerFluidContainer(sampleFluid, filledContainer);
 +
 
 +
        //ローカライズ表示名の登録
 +
LanguageRegistry.addName(itemSampleFluid, "bottledSampleLiquid");
 +
LanguageRegistry.addName(itemSampleFluid, "ja-JP", "ボトル要りサンプル流体");
 +
}
 +
 +
 +
/**
 +
* IconはResourceパックを変更する際、新しいインスタンスが生成されるため
 +
* TextureMapの生成タイミングをフックして登録し直す必要があります。
 +
*
 +
* また、ブロック無し流体の場合ここでRegisterIconを呼ぶ必要があるため
 +
* TextureStitchEvent.Pre で処理します。
 +
*/
 +
@ForgeSubscribe
 +
public void PreTextureStitchEvent(TextureStitchEvent.Pre event){
 +
//必ず 0:"/terain.png"(※ブロックと共有) のTextureMapに画像を登録する必要があります。
 +
if(event.map.textureType == 0){
 +
 +
//初期化時に保存しておいた流体クラスを利用する
 +
//または流体名を指定してFluidRegistoryからFluidインスタンスを取得します。
 +
 
 +
Fluid f = sampleFluid;
 +
//Fluid f = FluidRegistry.getFluid("LiquidSample");
 +
 +
if(f != null){
 +
if(f.getBlockID() != -1){
 +
//流体ブロックを実装している場合は、ブロックからの流用が可能です。
 +
//尚本チュートリアルは流体のみ(ついでに容器)の登録なため使用されません。例として参照ください。
 +
//getIcon(int side,int meta) getBlockTextureFromSide(int side)等。
 +
 
 +
f.setIcons(Block.blocksList[f.getBlockID()].getBlockTextureFromSide(1));
 +
}else{
 +
//ブロックのIcon登録と同様です。
 +
 
 +
//この例の場合 assets/samplefluid/textures/blocks/LiquidSample.png が必要です。
 +
//※本チュートリアルでは DOMAIN_NAME = samplefluid , f.getName() == "LiquidSample" となっています。
 +
Icon commonIcon = event.map.registerIcon(DOMAIN_NAME + ":" + f.getName());
 +
 
 +
//下記のように、ドメインを省略した場合はデフォルトでminecraftドメインとなり
 +
//event.map.registerIcon("name");
 +
//必要な画像は assets/minecraft/textures/blocks/name.png となります。
 +
//できるだけ重複を避けるために、独自ドメインを指定しましょう。
 +
 
 +
f.setIcons(commonIcon);
 +
 
 +
 
 +
//また、静止状態 still / 流動状態 flowingを別々に指定できます。
 +
//f.setIcons(stillIcon, flowingIcon);
 +
//f.setStillIcon(stillIcon);
 +
//f.setFlowingIcon(flowingIcon);
 +
}
 +
}
 +
}
 +
}
 +
 
 +
}
 +
</source>
 +
 
 +
==その他==
 +
===テクスチャ===
 +
今回の場合は、容器テクスチャに<br />
 +
"assets/samplefluid/textures/items/LiquidSample.png"<br />
 +
流体用テクスチャに<br />
 +
"assets/samplefluid/textures/blocks/LiquidSample.png"<br />
 +
が使用されます。<br>
 +
 
 +
===Fluid===
 +
1.5.2までのMinecraft ForgeではBCで使われていた液体APIを改修したものが実装されていました。<br />
 +
1.6.xからはLiquidDictionary→FluidDictionaryに刷新され多くの機能が増えました。<br />
 +
これにより、アイテムやブロックの実体を持たずに流体のみが存在する物を追加できるようになりました。
 +
詳しくは、Fluidクラスを見てください。(液体の明るさや、密度などが設定できるようです)
 +
 
 +
<comments />

2013年7月24日 (水) 19:19時点における版


このページは投稿・編集の練習用です。
自由に変更して頂いて構いませんが、不定期に内容は削除されますのでメモ代わりには使用しないで下さい。

この記事は"Minecraft Forge Universal 9.10.0.xxx~"を前提MODとしています。

流体の追加

流体追加のチュートリアルです。
このチュートリアルで追加した流体は流体APIをサポートする他のMODで扱うことが出来る可能性があります。

ソースコード

  • SampleFluid.java
package mods.samplefluid;

import net.minecraft.item.Item;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;

@Mod(modid="samplefluid.SampleFluid", name="SampleFluid", version="1.0")
public class SampleFluid {

	//容器入り流体のアイテムID
	public static int sampleFluidID = 28000;
    //容器入り流体アイテム
	public static Item itemSampleFluid;

    //流体クラス
	public static Fluid sampleFluid ;

    //ドメイン名
    //他mod等との競合を避けるための識別用の名前です。 ※英数字小文字 及び "." 等が使えます。大文字や"/"は使えません。
	public static final String DOMAIN_NAME = "samplefluid";

	@Instance("SampleFluid")
        protected static SampleFluid instance;
    
    @EventHandler
	public void preInit(FMLPreInitializationEvent evt) {
        //TextureStitchEvent.Preイベントのためにイベントバスに登録します。
		MinecraftForge.EVENT_BUS.register(this);
	}
	
	@EventHandler
	public void load(FMLInitializationEvent event) {

		sampleFluid = new Fluid("LiquidSample");//Fluidクラスのインスタンスを生成
		FluidRegistry.registerFluid(sampleFluid);
		
        //容器入り流体の登録です。
        //通常のアイテム作成と同様なので省略します。
        //バケツのような動作には別途実装が必要です。
		itemSampleFluid = new Item(sampleFluidID)
    		    .setUnlocalizedName(DOMAIN_NAME + ".liquidSample") //内部アイテム名の登録
    		     //テクスチャ名の登録 func_111206_dはForgeバージョンによって名称が変わることがあります。
    		     //assets/samplefluid/textures/item/bottoledLiquidSample.png が必要です。
	    	    .func_111206_d(DOMAIN_NAME + ":bottled" + sampleFluid.getName());
	    	    
	    ItemStack filledContainer = new ItemStack(itemSampleFluid);
		FluidContainerRegistry.registerFluidContainer(sampleFluid, filledContainer);

        //ローカライズ表示名の登録
		LanguageRegistry.addName(itemSampleFluid, "bottledSampleLiquid");
		LanguageRegistry.addName(itemSampleFluid, "ja-JP", "ボトル要りサンプル流体");
	}
	
	
	/**
	 * IconはResourceパックを変更する際、新しいインスタンスが生成されるため
	 * TextureMapの生成タイミングをフックして登録し直す必要があります。
	 *
	 * また、ブロック無し流体の場合ここでRegisterIconを呼ぶ必要があるため
	 * TextureStitchEvent.Pre で処理します。
	 */
	@ForgeSubscribe
	public void PreTextureStitchEvent(TextureStitchEvent.Pre event){
		//必ず 0:"/terain.png"(※ブロックと共有) のTextureMapに画像を登録する必要があります。
		if(event.map.textureType == 0){
			
			//初期化時に保存しておいた流体クラスを利用する
			//または流体名を指定してFluidRegistoryからFluidインスタンスを取得します。

			Fluid f = sampleFluid;
			//Fluid f = FluidRegistry.getFluid("LiquidSample");
			
			if(f != null){
				if(f.getBlockID() != -1){
					//流体ブロックを実装している場合は、ブロックからの流用が可能です。
					//尚本チュートリアルは流体のみ(ついでに容器)の登録なため使用されません。例として参照ください。
					//getIcon(int side,int meta) getBlockTextureFromSide(int side)等。

					f.setIcons(Block.blocksList[f.getBlockID()].getBlockTextureFromSide(1));
				}else{
					//ブロックのIcon登録と同様です。

					//この例の場合 assets/samplefluid/textures/blocks/LiquidSample.png が必要です。
					//※本チュートリアルでは DOMAIN_NAME = samplefluid , f.getName() == "LiquidSample" となっています。
					Icon commonIcon = event.map.registerIcon(DOMAIN_NAME + ":" + f.getName());

					//下記のように、ドメインを省略した場合はデフォルトでminecraftドメインとなり
					//event.map.registerIcon("name");
					//必要な画像は assets/minecraft/textures/blocks/name.png となります。
					//できるだけ重複を避けるために、独自ドメインを指定しましょう。

					f.setIcons(commonIcon);


					//また、静止状態 still / 流動状態 flowingを別々に指定できます。
					//f.setIcons(stillIcon, flowingIcon);
					//f.setStillIcon(stillIcon);
					//f.setFlowingIcon(flowingIcon);
				}
			}
		}
	}

}

その他

テクスチャ

今回の場合は、容器テクスチャに
"assets/samplefluid/textures/items/LiquidSample.png"
流体用テクスチャに
"assets/samplefluid/textures/blocks/LiquidSample.png"
が使用されます。

Fluid

1.5.2までのMinecraft ForgeではBCで使われていた液体APIを改修したものが実装されていました。
1.6.xからはLiquidDictionary→FluidDictionaryに刷新され多くの機能が増えました。
これにより、アイテムやブロックの実体を持たずに流体のみが存在する物を追加できるようになりました。 詳しくは、Fluidクラスを見てください。(液体の明るさや、密度などが設定できるようです)


自分のコメントを追加
Minecraft Modding Wikiはすべてのコメントを歓迎します。匿名で投稿したくない場合は、アカウント作成またはログインしてください。無料です。