如何在MinecraftFORGE做出时停功能
2023-07-31 18:01 作者:MegaDarkness | 我要投稿
时停程度可以分为3个阶段:
1.仅实体的暂停。
2.isGamePaused级别(有颤动,有/无发包)。
4.事件级别时停(有发包)。
第一阶段
最最初始的,你可以去尝试固定住实体的坐标。 对于Mob实体,你可以去尝试设置NoAi。
注意
要保存时停前后的实体信息以便恢复。
第二阶段
来到Mineceaft类里,找到isGamePaused字段。通过反射或AT去掉private修饰后修改字段值为true即可。
你可以监听ClientTickEvent事件手动更新玩家实体。
(你可能会发现一些粒子,实体动画不停打颤,我们应该修改渲染粒子,实体时的局部变量partialTicks为0解决问题)
第三阶段
使用mixin,coremod或其他方法修改Util#millis(有的版本是getMillis)方法的返回值。 定义一个long型的名叫millis的静态变量,在模组主类构造方法里启动一个线程池里使millis+1,同时强制更新客户端玩家,更新键盘,current screen。 如果玩家屏幕,挥手之类的动画出现卡顿,请自己使用mc的timer通过自己的millis获取到正确的partialTicks,并响应的更新渲染。 (如Camera类里的setup方法,GameRenderer类里的renderHand方法等)
笔者实力有限,更加完美的请自行摸索