Skip to content

Comments

对1.20.1更高射速武器的适配#635

Open
lljshh wants to merge 6 commits intoMCModderAnchor:1.20.1from
lljshh:1.20.1-high-rpm
Open

对1.20.1更高射速武器的适配#635
lljshh wants to merge 6 commits intoMCModderAnchor:1.20.1from
lljshh:1.20.1-high-rpm

Conversation

@lljshh
Copy link

@lljshh lljshh commented Feb 12, 2026

我尝试适配了超过1200射速的武器

我注意到有部分枪包中射速超过1200,在原版TACZ中这些武器的射速会被强行降低至1200每分钟

我通过将全自动的发射逻辑从Minecraft中独立出来的方式一定程度上解决的DPS低于理想值和弹药消耗低于理想值的问题。

改动与说明

网络部分

增加了三个数据包,分别为ClientMessagePlayerShootBeginClientMessagePlayerShootEndServerMessageGunStop,用途分别为客户端通知服务器开始全自动射击,客户端通知服务端停止全自动射击,服务端强行停止客户端继续射击(由于缺少弹药)。

射击逻辑部分

我先简要说明一下修改后的全自动射击流程:摁下射击键后客户端想服务器发送ClientMessagePlayerShootBegin同时自己启动一个子线程用于播放音效和提供后坐力,服务器收到后在LivingEntityShoot.startFullAuto方法中启动一个子线程用于向ShootBus类声明自己射出去的子弹数量,ShootBus.processAndClear方法注册了一个监听器,用于每刻将每个玩家打出去的子弹分别进行一次射击,避免了大量子弹实体造成的卡顿。当客户端松开射击键时,会发送ClientMessagePlayerShootEnd包并杀死自身创建的Gun-AutoShoot-Scheduler线程,服务器收到包后也会杀死自身创建的与该玩家绑定的Gun-AutoShoot-Scheduler线程。当服务器判定弹药打空之后会发送ServerMessageGunStop包直接调用客户端由Mixin注入的LivingEntity.stopFullAuto方法停止全自动射击。

伤害计算部分

EntityKineticBullet.onBulletTick方法中加入了一个for循环用于多次计算一个子弹实体中包含的多个子弹造成的伤害。

几乎没有对已有的半自动射击和爆发射击做出改变

杂项

新引入了it.unimi.dsi:fastutil库用于ShootBus类中

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant