自定义粒子 1.21 Fabric
本篇教程的视频:
本篇教程源代码
GitHub地址:TutorialMod-Particle-1.21
介绍
老本行吗?不是
虽然说我以前是干粒子特效的,但是现在我已经不干了,而是主要写模组出教程了,不过,也许我可以重启粒子特效的教程,不过那是以后的事情了
这里我们将为我们的模组添加自定义粒子
,这个粒子是一个简单的粒子,也就是Fabric Wiki
是经典的GREEN FLAME
,这个粒子是一个绿色的火焰粒子
因为更为复杂的粒子特效教程有人在做了,大家可以前往Here
查看源代码
原版的那些粒子可以到ParticleTypes
这个类中查看
1 | public static final SimpleParticleType ANGRY_VILLAGER = register("angry_villager", false); |
主要是两个类,一个是SimpleParticleType
,一个是ParticleType
,这两个类是用于注册粒子的类型
前者是非常简单的粒子,后者是比较复杂的粒子,比如说DustParticleEffect
这个粒子就是一个复杂的粒子,它有颜色
、大小
,又可以旋转
等等
本篇教程我们将使用SimpleParticleType
来注册一个简单的粒子,而上面给出的那个链接是一个比较复杂的粒子,大家可以去看看
那么下面的就是注册方法,当然我们不能直接用
1 | private static SimpleParticleType register(String name, boolean alwaysShow) { |
这个方法我们待会还得改写
注册粒子
创建ModParticles类
这个类用于粒子的注册
1 | public class ModParticles { |
我们先来搞定它的注册方法
1 | private static SimpleParticleType register(String name, SimpleParticleType type) { |
可以看到,我们这里的name
是一个String
,而type
是一个SimpleParticleType
,这里就直接指定了。这里并不像原版的那样是布尔值,改成了粒子类型。
后面再指定我们的命名空间
接下来就是注册我们的粒子
1 | public static final SimpleParticleType GREEN_FLAME = register("green_flame", FabricParticleTypes.simple()); |
这里我们注册了一个GREEN_FLAME
的粒子,这个粒子是一个绿色的火焰粒子,我们使用了FabricParticleTypes.simple()
这个方法来创建一个简单的粒子,这是Fabric
的API
最后一个是初始化方法
1 | public static void registerModParticles() { |
并在主类初始化
1 | ModParticles.registerModParticles(); |
客户端注册
粒子这种东西它是要渲染的,所以我们需要在客户端注册
1 | ParticleFactoryRegistry.getInstance().register(ModParticles.GREEN_FLAME, FlameParticle.Factory::new); |
这里我们注册了GREEN_FLAME
粒子,这个粒子的工厂是FlameParticle.Factory
,这个工厂是原版的火焰粒子的工厂,我们可以直接使用
粒子文件
路径:resources/assets/tutorialmod/particles
,名字就是我们注册的green_flame
1 | { |
使用粒子
用到粒子的地方其实很多,比如破坏方块、实体死亡、实体受伤等等,都会用到粒子
教程中我们没有这样的实例,这里的图文教程我补充一下
我们随便找一个之前写的自定义方块类,然后加入以下代码
1 |
|
我们重写方块的randomDisplayTick
方法
让这个方块随机产生粒子,这个粒子是GREEN_FLAME
,位置是方块的位置(xyz
),后面三个是xyz
方向上的初速度
这样我们就可以看到在方块上产生的粒子了
另外,我们也可以使用particle
命令来产生粒子