本篇教程的视频

本篇教程的源代码

GitHub地址:TutorialMod-MusicDisc-1.20.1

本篇教程目标

  • 理解原版音乐唱片的注册
  • 为模组添加自定义音乐唱片

查看源代码

我们来看看音乐唱片的注册方法,其实就是和前面一篇教程差不多的

1
public static final SoundEvent MUSIC_DISC_5 = register("music_disc.5");

后面的注册方法也是之前讲过的

1.20中的话,音乐唱片的添加还算简单,而1.21就复杂了

然后还有音乐唱片这个物品的注册,我们可以在Items中找到

1
2
3
public static final Item MUSIC_DISC_5 = register(
"music_disc_5", new MusicDiscItem(15, SoundEvents.MUSIC_DISC_5, new Item.Settings().maxCount(1).rarity(Rarity.RARE), 178)
);

它实例化的是MusicDiscItem,它有4个参数

第一个是输出的红石信号强度

第二个是对应的声音事件

第三个是物品设置,这里我们设置为最大堆叠数为1,稀有度为稀有

最后一个参数是音乐唱片的时长,单位是

添加音乐唱片

这里我们直接来添加音乐唱片

注册声音事件

那么首先是进行声音事件的注册

1
public static final SoundEvent A_MOMENT_APART_MUSIC_DISC = register("a_moment_apart_music_disc");

这个音乐的话,其实就是地平线4的开场音乐

注册音乐唱片物品

那么接下来来注册音乐唱片这个物品

1
2
public static final Item A_MOMENT_APART_MUSIC_DISC = registerItems("a_moment_apart_music_disc",
new MusicDiscItem(15, ModSoundEvents.A_MOMENT_APART_MUSIC_DISC, new Item.Settings().maxCount(1), 234));

这里我们设置最大堆叠数为1,时长为234秒

数据文件

物品标签

音乐唱片是要写一个物品标签的,让它可以放到唱片机里播放

1
2
getOrCreateTagBuilder(ItemTags.MUSIC_DISCS)
.add(ModItems.A_MOMENT_APART_MUSIC_DISC);

这里同样在数据生成类中写一下

音频文件

一样的,我们还是将音频文件放在<modid>/sounds

注意文件格式为ogg,然后音频得是单声道的,双声道将会导致声音没有衰减,即你在加载出来的区块中,都能听到唱片机的声音

sounds.json

然后是sounds.json,这里我们添加一个音乐唱片的映射

1
2
3
4
5
6
7
8
"a_moment_apart_music_disc": {
"sounds": [
{
"name": "tutorial-mod:a_moment_apart",
"stream": true
}
]
}

和其他的声音事件不一样的是,这里就没有subtitle

然后在sounds里面,指向声音文件,stream设置为true,即流式播放

语言文件

语言文件主要写的是唱片物品的名字,还有放到唱片机中,弹出来的那一串彩色的字幕

1
2
translationBuilder.add(ModItems.A_MOMENT_APART_MUSIC_DISC, "A Moment Apart Music Disc");
translationBuilder.add(ModItems.A_MOMENT_APART_MUSIC_DISC.getTranslationKey() + ".desc", "A Moment Apart");

彩色字幕的那一块加上.desc即可

测试

那么最后我们就可以进入游戏进行测试了