版本信息
你使用的IDE:IntelliJ IDEA
你使用的IDE版本:2019.3.4
Forge版本: 28.2.3
Minecraft版本: 1.14.4
情况简述
我制作了一个最基本的方块,然后希望将这个方块被放置/摧毁是发出的声音自定义为游戏中没有的新声音。请问我该怎么做?
我目前是mc mod制作的初学者,主要依赖的教程为 @FledgeXu 在bilibili发布的视频。我在forge论坛和mcwiki上进行了搜索,似乎没有找到有用的内容。
版本信息
你使用的IDE:IntelliJ IDEA
你使用的IDE版本:2019.3.4
Forge版本: 28.2.3
Minecraft版本: 1.14.4
情况简述
我制作了一个最基本的方块,然后希望将这个方块被放置/摧毁是发出的声音自定义为游戏中没有的新声音。请问我该怎么做?
我目前是mc mod制作的初学者,主要依赖的教程为 @FledgeXu 在bilibili发布的视频。我在forge论坛和mcwiki上进行了搜索,似乎没有找到有用的内容。
实际上Forge的文档已经说的挺明白了…
如果要教程,这里也有。
https://www.bilibili.com/video/BV11g4y1b7vh?p=31
非常感谢!不过我在实践时遇到了一点问题:(对应视频的03:46秒处)在1.14.4的block文件中似乎不能override getAmbientSound ,可供override 的相关项似乎只有 getSoundtype 一个。请问我该怎么做?
还有一点,如果我希望在RegistryHandler.java而不是比如MyMod.java中注册声音的话,请问需要怎么做呢?我尝试像注册item和block一样去注册声音,但是失败了。
Block.Properties
的SoundType
。SoundEvent
,事实上所有需要注册的东西都继承了ForgeRegistryEntry
。感谢您的回答!我在第一个问题上做出了尝试,发现如果使用统一的ModSounds.java(我想模仿教程中的ModBlocks.java)会在修改SoundType时更加简单。但是这引出了第二个问题,三楼教程视频中的写法似乎就变得不太适用了。我尝试模仿着之前block的文件:
package com.uss_shenzhou.rainbow6.sounds;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SoundEvent;
public class barricade_break extends SoundEvent {
public barricade_break(ResourceLocation name) {
super(name);
this.setRegistryName("barricade_break");
}
ResourceLocation location = new ResourceLocation("rainbow6", "sounds/barricade_break");
SoundEvent event = new SoundEvent(location);
}
但是我不太清楚在
public barricade_break(ResourceLocation name) {
super(name);
}
这一段中应该如何修改,以及其余部分是否正确。还望您不吝赐教。
不用这么麻烦,你可以看一下net.minecraft.util.SoundEvents
这个类,原版的所有音效全部定义在这里了,你甚至不需要自己继承一个SoundEvent
最简单的用法是
@SubscribeEvent
public static void onContainerRegistry(RegistryEvent.Register<SoundEvent> event){
event.getRegistry().register(new SoundEvent(new ResourceLocation("路径名")).setRegistryName("注册名"));
}
当然我比较推荐把
new SoundEvent(new ResourceLocation("路径名")).setRegistryName("注册名")
单独抽出来,变成一个变量,然后再注册。
非常感谢!我在sounds.json中遇到了一点小问题,不过已经解决。再次谢谢您的帮助!
该主题在最后一个回复创建后7天后自动关闭。不再允许新的回复。