提供: Minecraft Modding Wiki
この記事は"Minecraft Forge Universal 13.19.0.xxx~"を前提MODとしています。 |
サウンドの追加[編集]
メインハンドまたはオフハンドで右クリックすることにより、独自サウンド2種類のいずれかをゲーム内で再生することのできるアイテム1種類を追加する。
ソースコード[編集]
SampleMod.java
import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.*; import net.minecraft.world.World; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.registry.GameRegistry; @Mod(modid = SampleMod.MOD_ID, name = SampleMod.MOD_NAME, version = SampleMod.MOD_VERSION) public class SampleMod { public static final String MOD_ID = "samplemod"; public static final String MOD_NAME = "SampleMod"; public static final String MOD_VERSION = "0.1.0"; /* * @GameRegistry.ObjectHolder を付けたクラスやフィールドには自動的にForgeRegistryに登録されたオブジェクトが代入されます。 * 例えば、SampleMod.Items.sample_bellの場合、クラスSampleMod.Itemsで指定されたドメイン名(samplemod)で登録された、 * フィールドの型(Item、サブクラスでは動かない?)と名前(sample_bell)に対応したオブジェクトが自動代入されます。 */ @GameRegistry.ObjectHolder(MOD_ID) public static class Items { public static final Item sample_bell = null; } @GameRegistry.ObjectHolder(MOD_ID) public static class SoundEvents { public static final SoundEvent sample_sound_1 = null; public static final SoundEvent sample_sound_2 = null; } @Mod.EventHandler private void preInit(FMLPreInitializationEvent event) { if (event.getSide().isClient()) { ModelLoader.setCustomModelResourceLocation(Items.sample_bell, 0, new ModelResourceLocation(Items.sample_bell.getRegistryName(), "inventory")); } } /* * @Mod.EventBusSubscriberを付けたクラスは @SubscribeEvent に対応した static なメソッドを呼び出すよう登録されます */ @Mod.EventBusSubscriber public static class Registration { @SubscribeEvent protected static void registerItems(RegistryEvent.Register<Item> event) { event.getRegistry().registerAll( new ItemSampleBell() .setCreativeTab(CreativeTabs.MISC) .setRegistryName(new ResourceLocation(MOD_ID, "sample_bell")) .setUnlocalizedName(MOD_ID + ".sample_bell") ); } @SubscribeEvent protected static void registerSoundEvents(RegistryEvent.Register<SoundEvent> event) { ResourceLocation rl_sample_sound_1 = new ResourceLocation(MOD_ID, "sample_sound_1"); ResourceLocation rl_sample_sound_2 = new ResourceLocation(MOD_ID, "sample_sound_2"); event.getRegistry().registerAll( new SoundEvent(rl_sample_sound_1).setRegistryName(rl_sample_sound_1), new SoundEvent(rl_sample_sound_2).setRegistryName(rl_sample_sound_2) ); } } public static class ItemSampleBell extends Item { @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) { /* * メインハンドのときsample_sound_1を、オフハンドのときsample_sound_2を鳴らします。 */ final SoundEvent sound = handIn == EnumHand.MAIN_HAND ? SoundEvents.sample_sound_1 : SoundEvents.sample_sound_2; /* * 第1引数は音が鳴ったことを通知するパケット送信先から除外するプレイヤーです。つまり、音を鳴らしたクライアント(のプレイヤー)が該当します。 * 第2から第4引数は音が鳴る中心座標です。距離と音量(第7引数)に応じて自動で減衰します。 * 第5引数はサウンドを指定しています。 * 第6引数はボリューム設定の各音量に対応しています。 * 第7引数は音量(volume)です。 * 第8引数はピッチ(pitch)です。 */ worldIn.playSound(playerIn, playerIn.posX, playerIn.posY, playerIn.posZ, sound, SoundCategory.RECORDS, 3f, 1f); return ActionResult.newResult(EnumActionResult.SUCCESS, playerIn.getHeldItem(handIn)); } } }
リソース[編集]
mcmod.info
(省略)
assets\samplemod\en_US.lang
# Sample Translation File [en_US] item.samplemod.sample_bell.name=Sample Bell samplemod.subtitle.sample_sound_1=Sample Sound 1 samplemod.subtitle.sample_sound_2=Sample Sound 2
assets\samplemod\models\item\sample_bell.json
{ "parent": "item/generated", "textures": { "layer0": "items/apple" } }
assets\samplemod\sounds.json
{ "sample_sound_1": { "subtitle": "samplemod.subtitle.sample_sound_1", "sounds": ["samplemod:sample_sound_1"] }, "sample_sound_2": { "subtitle": "samplemod.subtitle.sample_sound_2", "sounds": ["samplemod:sample_sound_2"] } }
assets\samplemod\sounds\sample_sound_1.ogg
(省略)
assets\samplemod\sounds\sample_sound_2.ogg
(省略)