版本信息
你使用的IDE:
你使用的IDE版本:<2020.2.20>
Forge版本: <1.15.2>
Minecraft版本: <1.15.2>
错误情况简述
制作屏幕晃动效果,类似于原版受伤的时候触发的那种效果。
我玩的模组比较少,我只知道AOA3枪械后坐力有这种效果,但是它闭源还不是1.15.2的
我看了原版的代码,这个好像不在attackEntityFrom函数里
版本信息
你使用的IDE:
你使用的IDE版本:<2020.2.20>
Forge版本: <1.15.2>
Minecraft版本: <1.15.2>
错误情况简述
制作屏幕晃动效果,类似于原版受伤的时候触发的那种效果。
我玩的模组比较少,我只知道AOA3枪械后坐力有这种效果,但是它闭源还不是1.15.2的
我看了原版的代码,这个好像不在attackEntityFrom函数里
我没有实现过这个功能,接下来都是我研究原版代码的猜测。
简单的答案是,Forge有个EntityViewRenderEvent
事件,你大概能调用事件里带来的renderer
的applyBobbing
方法让玩家视角摇晃,或者直接用CameraSetup
这个子事件修改玩家的Camera视角。
或者是可以调用
Minecraft.getInstance().gameRenderer.applyBobbing(MatrixStack matrixStackIn, float partialTicks)
方法来实现晃动(你需要用AT修改applyBobbing
的访问等级)
接下来是我获取答案的过程
options.viewBobbing
options.viewBobbing
对应的代码是:public static final BooleanOption VIEW_BOBBING = new BooleanOption("options.viewBobbing", (p_228036_0_) -> {
return p_228036_0_.viewBobbing;
}, (p_228038_0_, p_228038_1_) -> {
p_228038_0_.viewBobbing = p_228038_1_;
});
这里设置了一个viewBobbing
,接下来看这个viewBobbing
的使用。viewBobbing
在GameRender
中的renderHand
和renderWorld
都有调用,在这两个函数中都调用了applyBobbing
这个方法实现了具体的「晃动」,接下来就要寻找Forge有没有提供方法让我可以实现这个功能。renderWorld
关系比较小,我去看了renderHand
的调用链,然后发现在renderWorld
里,调用了renderHand
(renderWorld
这个方法里具体的代码,发现了 Forge 的 Hook,然后我读了一下这个事件相关的注释,大概能确定你可以在这个事件里实现你想要的功能。net.minecraftforge.client.event.EntityViewRenderEvent.CameraSetup cameraSetup = net.minecraftforge.client.ForgeHooksClient.onCameraSetup(this, activerenderinfo, partialTicks);
这里用到的全是IntelliJ的基础功能。
在开发的过程中你得熟练使用开发工具,在这里我们的工具是IntelliJ IDEA。有两个快捷键对于理解代码有非常大的帮助。第一个快捷键是
Ctrl+N(Windows)
,这个快捷键可以让你搜索指定的类,这样你就可寻找原版类里在哪里,有什么内容了。另一个快捷键就是Ctrl+H
当你把鼠标指针放在一个类上时,按下这个快捷键,会在右侧显示这个类的继承关系,也可查看某个接口的具体实现,大家可以自己上网搜索IDEA常用快捷键学习使用。另外一个技巧是,当你看到某个方法,想要知道这个方法在哪里调用时,可以右键然后点击
Find Usages(查找使用)
,你就可以看见所有调用这个方法的代码了。还有如果你想查看某个类的源代码,只需要按住
Ctrl
键,点击那个类就可以进入到那个类内部查看它的源代码。
我去看了这个函数的源代码,GameRender将会把自己平滑地旋转到某一个角度,好像是这样的
不过我头一回知道Java还能修改访问等级,AT是什么东西啊
不是Java的特性……
该主题在最后一个回复创建后7天后自动关闭。不再允许新的回复。