1.11のサウンド追加

提供:Minecraft Modding Wiki
移動: 案内, 検索

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

Wood pickaxe.png
初心者向けのチュートリアルです。
C none.png
Soundに関係のあるチュートリアルです。

目次

[編集] サウンドの追加

メインハンドまたはオフハンドで右クリックすることにより、独自サウンド2種類のいずれかをゲーム内で再生することのできるアイテム1種類を追加する。

[編集] ソースコード

SampleMod.java

  1. import net.minecraft.client.renderer.block.model.ModelResourceLocation;
  2. import net.minecraft.creativetab.CreativeTabs;
  3. import net.minecraft.entity.player.EntityPlayer;
  4. import net.minecraft.item.Item;
  5. import net.minecraft.item.ItemStack;
  6. import net.minecraft.util.*;
  7. import net.minecraft.world.World;
  8. import net.minecraftforge.client.model.ModelLoader;
  9. import net.minecraftforge.event.RegistryEvent;
  10. import net.minecraftforge.fml.common.Mod;
  11. import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
  12. import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
  13. import net.minecraftforge.fml.common.registry.GameRegistry;
  14.  
  15. @Mod(modid = SampleMod.MOD_ID, name = SampleMod.MOD_NAME, version = SampleMod.MOD_VERSION)
  16. public class SampleMod {
  17.     public static final String MOD_ID = "samplemod";
  18.     public static final String MOD_NAME = "SampleMod";
  19.     public static final String MOD_VERSION = "0.1.0";
  20.  
  21.     /*
  22.      * @GameRegistry.ObjectHolder を付けたクラスやフィールドには自動的にForgeRegistryに登録されたオブジェクトが代入されます。
  23.      * 例えば、SampleMod.Items.sample_bellの場合、クラスSampleMod.Itemsで指定されたドメイン名(samplemod)で登録された、
  24.      * フィールドの型(Item、サブクラスでは動かない?)と名前(sample_bell)に対応したオブジェクトが自動代入されます。
  25.      */
  26.     @GameRegistry.ObjectHolder(MOD_ID)
  27.     public static class Items {
  28.         public static final Item sample_bell = null;
  29.     }
  30.  
  31.     @GameRegistry.ObjectHolder(MOD_ID)
  32.     public static class SoundEvents {
  33.         public static final SoundEvent sample_sound_1 = null;
  34.         public static final SoundEvent sample_sound_2 = null;
  35.     }
  36.  
  37.     @Mod.EventHandler
  38.     private void preInit(FMLPreInitializationEvent event) {
  39.         if (event.getSide().isClient()) {
  40.             ModelLoader.setCustomModelResourceLocation(Items.sample_bell, 0, new ModelResourceLocation(Items.sample_bell.getRegistryName(), "inventory"));
  41.         }
  42.     }
  43.  
  44.     /*
  45.      * @Mod.EventBusSubscriberを付けたクラスは @SubscribeEvent に対応した static なメソッドを呼び出すよう登録されます
  46.      */
  47.     @Mod.EventBusSubscriber
  48.     public static class Registration {
  49.         @SubscribeEvent
  50.         protected static void registerItems(RegistryEvent.Register<Item> event) {
  51.             event.getRegistry().registerAll(
  52.                 new ItemSampleBell()
  53.                         .setCreativeTab(CreativeTabs.MISC)
  54.                         .setRegistryName(new ResourceLocation(MOD_ID, "sample_bell"))
  55.                         .setUnlocalizedName(MOD_ID + ".sample_bell")
  56.             );
  57.         }
  58.  
  59.         @SubscribeEvent
  60.         protected static void registerSoundEvents(RegistryEvent.Register<SoundEvent> event) {
  61.             ResourceLocation rl_sample_sound_1 = new ResourceLocation(MOD_ID, "sample_sound_1");
  62.             ResourceLocation rl_sample_sound_2 = new ResourceLocation(MOD_ID, "sample_sound_2");
  63.  
  64.             event.getRegistry().registerAll(
  65.                     new SoundEvent(rl_sample_sound_1).setRegistryName(rl_sample_sound_1),
  66.                     new SoundEvent(rl_sample_sound_2).setRegistryName(rl_sample_sound_2)
  67.             );
  68.         }
  69.     }
  70.  
  71.     public static class ItemSampleBell extends Item {
  72.         @Override
  73.         public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) {
  74.             /*
  75.              * メインハンドのときsample_sound_1を、オフハンドのときsample_sound_2を鳴らします。
  76.              */
  77.             final SoundEvent sound = handIn == EnumHand.MAIN_HAND ? SoundEvents.sample_sound_1 : SoundEvents.sample_sound_2;
  78.  
  79.             /*
  80.              * 第1引数は音が鳴ったことを通知するパケット送信先から除外するプレイヤーです。つまり、音を鳴らしたクライアント(のプレイヤー)が該当します。
  81.              * 第2から第4引数は音が鳴る中心座標です。距離と音量(第7引数)に応じて自動で減衰します。
  82.              * 第5引数はサウンドを指定しています。
  83.              * 第6引数はボリューム設定の各音量に対応しています。
  84.              * 第7引数は音量(volume)です。
  85.              * 第8引数はピッチ(pitch)です。
  86.              */
  87.             worldIn.playSound(playerIn, playerIn.posX, playerIn.posY, playerIn.posZ, sound, SoundCategory.RECORDS, 3f, 1f);
  88.  
  89.             return ActionResult.newResult(EnumActionResult.SUCCESS, playerIn.getHeldItem(handIn));
  90.         }
  91.     }
  92. }

[編集] リソース

mcmod.info
(省略)

assets\samplemod\en_US.lang

  1. # Sample Translation File [en_US]
  2.  
  3. item.samplemod.sample_bell.name=Sample Bell
  4.  
  5. samplemod.subtitle.sample_sound_1=Sample Sound 1
  6. samplemod.subtitle.sample_sound_2=Sample Sound 2

assets\samplemod\models\item\sample_bell.json

  1. {
  2.   "parent": "item/generated",
  3.   "textures": {
  4.     "layer0": "items/apple"
  5.   }
  6. }

assets\samplemod\sounds.json

  1. {
  2.   "sample_sound_1": {
  3.     "subtitle": "samplemod.subtitle.sample_sound_1",
  4.     "sounds": ["samplemod:sample_sound_1"]
  5.   },
  6.   "sample_sound_2": {
  7.     "subtitle": "samplemod.subtitle.sample_sound_2",
  8.     "sounds": ["samplemod:sample_sound_2"]
  9.   }
  10. }


assets\samplemod\sounds\sample_sound_1.ogg
(省略)

assets\samplemod\sounds\sample_sound_2.ogg
(省略)

[編集] 解説

チュートリアル
個人用ツール