提供: Minecraft Modding Wiki
音の追加
とりあえず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内のファイルを別のフォルダにコピーするメソッドをコピーリソース(非公式日本フォーラム内の記事)などを参考に作成すると便利になるかもしれません。