提供: Minecraft Modding Wiki
2013年9月16日 (月) 17:54時点におけるアルミ缶 (トーク | 投稿記録)による版 (ページの作成:「 == 音の追加 == とりあえずMinecraft Forge環境下で音を追加する方法と追加した音を鳴らす方法を記します。<br/> 間違っていた場...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

音の追加

とりあえずMinecraft Forge環境下で音を追加する方法と追加した音を鳴らす方法を記します。
間違っていた場合は申し訳ありません。
右クリックで音がなるブロックを作成します。

サンプルコード

  • SoundSampleCore.java
package sample;

import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.Mod;
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;

@Mod( modid="SoundSample", name="SoundSample", version="0.0.1" )
@NetworkMod( clientSideRequired=true, serverSideRequired=false )
public class SoundSampleCore
{
	public static Block blockSample;
	
	@Mod.PreInit
	public void preInit(FMLPreInitializationEvent event)
	{
		//ここで、イベントを登録する
		MinecraftForge.EVENT_BUS.register(new SoundEvent());
	}
	
	@Mod.Init
	public void load(FMLInitializationEvent event)
	{
		//ブロックの登録
		blockSample = (new BlockSample(1300, 20)).setBlockName("sampleblock").setCreativeTab(CreativeTabs.tabBlock);
		GameRegistry.registerBlock(blockSample);
		
		LanguageRegistry.addName(blockSample, "Sample Block");
		LanguageRegistry.instance().addNameForObject(blockSample, "ja_JP", "サンプルブロック");
	}
}
  • SoundEvent.java
package sample;

import java.io.File;

import net.minecraft.client.Minecraft;
import net.minecraftforge.client.event.sound.SoundLoadEvent;
import net.minecraftforge.event.ForgeSubscribe;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class SoundEvent
{
	@SideOnly(Side.CLIENT)
	@ForgeSubscribe
	public void onSoundLoad(SoundLoadEvent event)
	{
		File dataDir = Minecraft.getMinecraft().mcDataDir;
		
		//音をMinecraftに登録
		event.manager.soundPoolSounds.addSound("Sample1/Sample2/Sample.ogg", new File(dataDir, "resources/Sample1/Sample2/Sample.ogg"));
	}
}
  • BlockSample
package sample;
 
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.world.World;
import net.minecraft.entity.player.EntityPlayer;
 
public class BlockSample extends Block
{
	public BlockSample(int blockId, Material material)
	{
		super(blockId, material);
	}
	
	@Override
	public boolean onBlockActivated(World world, int par2, int par3, int par4, EntityPlayer entityPlayer, int par6, float par7, float par8, float par9)
	{
		world.playSound((double)par2 + 0.5, (double)par3 + 0.5, (double)par4 + 0.5, "Sample1.Sample2.Sample", 1.0f, 1.0f, false);
	}
}

解説

ブロックなどについては他のページも参照

SoundSampleCoreクラス

@Mod.PreInit
public void preInit(FMLPreInitializationEvent event)
{
	MinecraftForge.EVENT_BUS.register(new SoundEvent());
}

Minecraft_Forge_Eventシステム概要も参照

SoundEventクラス

event.manager.soundPoolSounds.addSound("Sample1/Sample2/Sample.ogg", new File(dataDir, "resources/Sample1/Sample2/Sample.ogg"));

ここでMinecraftのシステムに第2引数が指し示す音楽ファイルを登録することができ(Fileクラスを使用する点に注意)、音楽を使用する際は第1引数が重要になる。

BlockSampleクラス

無機能ブロックの追加も参照

@Override
public boolean onBlockActivated(World world, int par2, int par3, int par4, EntityPlayer entityPlayer, int par6, float par7, float par8, float par9)
{
	world.playSound((double)par2 + 0.5, (double)par3 + 0.5, (double)par4 + 0.5, "Sample1.Sample2.Sample", 1.0f, 1.0f, false);
}

onBlockActivatedは、ブロックが右クリックされたときに呼ばれるメソッド。
world.playSoundで、実際に音を鳴らす。
第1~3引数で、音源の座標を指定し、第4引数に登録した音を示す文字列を渡し、第5引数で音量、第6引数でピッチ(高さ?)、第7引数のbooleanは用途不明

補足

playSoundで指定する文字列は、addSoundメソッドの第1引数にしていした文字列の「/」を「.」に変え、拡張子をなくしたものです。
またこのサンプルコードは配布するModのzipファイルと音声ファイルを別にしないといけませんが、zip内のファイルを別のフォルダにコピーするメソッドをコピーリソース(非公式日本フォーラム内の記事)などを参考に作成すると便利になるかもしれません。