提供: Minecraft Modding Wiki
2013年7月20日 (土) 23:01時点におけるShift (トーク | 投稿記録)による版 (ページの作成:「{{前提MOD|reqmod="Minecraft Forge Universal 9.10.0.xxx~"}} ==流体の追加== <p>流体追加のチュートリアルです。<br /> このチュートリアル...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

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

流体の追加

流体追加のチュートリアルです。
このチュートリアルで追加した流体は他のMODで扱うことができます。

ソースコード

  • SampleFluid.java
package sample;

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", name="SampleFluid", version="1.0")
public class SampleFluid {

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

	public static Fluid sampleFluid ;//流体

	public static final String DOMAIN_NAME = "samplefluid";//テクスチャのパス

	@Instance("SampleFluid")
        protected static SampleFluid instance;

	@Mod.EventHandler
	public void load(FMLInitializationEvent event) {

		itemSampleFluid = new ItemSampleFluid(sampleFluidID).setUnlocalizedName("liquidSample");//ItemSampleFluidクラスのインスタンスを生成

		sampleFluid = new Fluid("SampleFluid").setIcons(itemSampleFluid.getIconFromDamage(0));//Fluidクラスのインスタンスを生成

		FluidRegistry.registerFluid(sampleFluid);

		LanguageRegistry.addName(itemSampleFluid, "SampleFluid");

	}

}
  • ItemSampleFluid.java
package sample;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;

public class ItemSampleFluid extends Item {

	private String IconName;

	public ItemSampleFluid(int par1) {
		super(par1);
		this.setCreativeTab(null);//クリエイティブで出す必要がないのでnull
	}

	@Override
	public Item setUnlocalizedName(String par1Str)
        {
		super.setUnlocalizedName(par1Str);
		IconName = (SampleFluid.DOMAIN_NAME + ":" + par1Str);
		return this;
        }

	@Override
	@SideOnly(Side.CLIENT)
	public void registerIcons(IconRegister par1IconRegister)
	{
		this.itemIcon = par1IconRegister.registerIcon(IconName);
	}

}

解説

SampleFluid.java

public static Item itemSampleFluid;//アイテム
public static int sampleFluidID = 28000;//流体のアイテムID
public static Fluid sampleFluid ;//流体
public static final String DOMAIN_NAME = "samplefluid";//テクスチャのパス

追加する流体(アイテム)を保持しておく変数
流体(アイテム)のIDを保持しておく変数
流体を保持しておく変数
テクスチャのパスを保持しておく変数
を宣言。

itemSampleFluid = new ItemSampleFluid(sampleFluidID).setUnlocalizedName("liquidSample");

sampleFluid = new Fluid("SampleFluid").setIcons(itemSampleFluid.getIconFromDamage(0));

変数に、新しくItemSampleFluidクラス、Fluidクラスのインスタンスを代入。

FluidRegistry.registerFluid(sampleFluid);

流体を流体辞書に登録。
これで、他のMODでも扱うことができるようになります。

LanguageRegistry.addName(itemSampleFluid, "SampleFluid");

追加するアイテムの表示名を登録。


ItemSampleFluid.java

@Override
	public Item setUnlocalizedName(String par1Str)
        {
		super.setUnlocalizedName(par1Str);
		IconName = (SampleFluid.DOMAIN_NAME + ":" + par1Str);
		return this;
        }

違うことが殆ど無いのでシステム名とテクスチャ名を同じにしています。
ついでにSampleFluid.javaで指定したテクスチャのパスも合わせています。

@Override
	@SideOnly(Side.CLIENT)
	public void registerIcons(IconRegister par1IconRegister)
	{
		this.itemIcon = par1IconRegister.registerIcon(IconName);
	}

テクスチャの設定。

その他

テクスチャ

テクスチャは、"assets/DOMAIN_NAME/textures/items/登録名"に置いたのが表示されます。
今回の場合は、"assets/samplefluid/textures/items/liquidSample.png"です。

Fluid

1.5.2までのMinecraft ForgeではBCで使われていた液体APIをそのまま利用していました。
しかし、1.6.xからはLiquidDictionary→FluidDictionaryに刷新され多くの機能が増えました。
詳しくは、Fluidクラスを見てください。(液体の明るさや、密度などが設定できるようです)