Skip to content

AUTO 射击模式改用 start/stop 网络模型#688

Open
SNWCreations wants to merge 3 commits into
MCModderAnchor:1.20.1from
SNWCreations:feature/auto-shoot-start-stop
Open

AUTO 射击模式改用 start/stop 网络模型#688
SNWCreations wants to merge 3 commits into
MCModderAnchor:1.20.1from
SNWCreations:feature/auto-shoot-start-stop

Conversation

@SNWCreations
Copy link
Copy Markdown
Contributor

@SNWCreations SNWCreations commented May 23, 2026

将全自动射击模式(AUTO 及 continuous_shoot=true 的 BURST)从逐发发包改为 start/stop 模型,由服务端 tick 循环驱动射击
解决高射速武器(如 minigun,1200 RPM)在远程服务器上因网络抖动导致射击不流畅的问题

改动内容

  • 新增 ClientMessagePlayerAutoShoot 网络消息,客户端仅在开始/停止射击时发包
  • 服务端 LivingEntityShoot 新增 tickAutoShoot() 方法,在 tick 中按射速自动驱动射击
  • 客户端 AUTO 模式下 doShoot() 不再发送逐发射击包,仅驱动动画和音效
  • 客户端在首发射击成功后才发送 start 包,避免冲刺等状态下产生假射击表现
  • 服务端对瞬态状态(冲刺、切枪、拉栓等)不终止自动射击,仅跳过当前 tick

类似 #634 #635 ,本 PR 旨在提供最简单的改进,用于修复现有的高射速武器(如转管机枪)的丢 shoot 问题,更高射速的适配暂未考虑

…bullet

High-RPM weapons (e.g. minigun at 1200 RPM) suffered from intermittent
shooting on remote servers due to network jitter causing timestamp
validation failures on every per-bullet packet.

Now AUTO mode (and continuous BURST) sends only start/stop packets.
The server drives shooting in its tick loop, eliminating sensitivity
to network timing. Client still locally drives animation/sound.
@lljshh
Copy link
Copy Markdown

lljshh commented May 23, 2026

和我之前兼容1200+射速的思路好像…感觉挺有用的

@SNWCreations
Copy link
Copy Markdown
Contributor Author

和我之前兼容1200+射速的思路好像…感觉挺有用的

本质就是纯 client 发 shoot 包转为 client 下"指令"改变状态,大量发包的情境下总是无法忽略网络延迟的。

@lljshh
Copy link
Copy Markdown

lljshh commented May 23, 2026

和我之前兼容1200+射速的思路好像…感觉挺有用的

本质就是纯 client 发 shoot 包转为 client 下"指令"改变状态,大量发包的情境下总是无法忽略网络延迟的。

如果帮忙实现了更高射速会考虑合并吗,我当时的策略是把射击和创建子弹实体分开,让一个实体对目标计算多次伤害

@SNWCreations
Copy link
Copy Markdown
Contributor Author

和我之前兼容1200+射速的思路好像…感觉挺有用的

本质就是纯 client 发 shoot 包转为 client 下"指令"改变状态,大量发包的情境下总是无法忽略网络延迟的。

如果帮忙实现了更高射速会考虑合并吗,我当时的策略是把射击和创建子弹实体分开,让一个实体对目标计算多次伤害

可以考虑分阶段 PR 【?

@lljshh
Copy link
Copy Markdown

lljshh commented May 23, 2026

和我之前兼容1200+射速的思路好像…感觉挺有用的

本质就是纯 client 发 shoot 包转为 client 下"指令"改变状态,大量发包的情境下总是无法忽略网络延迟的。

如果帮忙实现了更高射速会考虑合并吗,我当时的策略是把射击和创建子弹实体分开,让一个实体对目标计算多次伤害

可以考虑分阶段 PR 【?

比如说,你可以看一下我之前的pr,不过一直没得到回复这个

@SNWCreations
Copy link
Copy Markdown
Contributor Author

和我之前兼容1200+射速的思路好像…感觉挺有用的

本质就是纯 client 发 shoot 包转为 client 下"指令"改变状态,大量发包的情境下总是无法忽略网络延迟的。

如果帮忙实现了更高射速会考虑合并吗,我当时的策略是把射击和创建子弹实体分开,让一个实体对目标计算多次伤害

可以考虑分阶段 PR 【?

比如说,你可以看一下我之前的pr,不过一直没得到回复这个

看过了才提及的(
没回复这个问题,我也没啥好办法,各有各自的生活要忙 :/

@lljshh
Copy link
Copy Markdown

lljshh commented May 23, 2026

我也没

好的,谢谢

@xjqsh
Copy link
Copy Markdown
Contributor

xjqsh commented May 24, 2026

唉,不好意思,自从毕业后一直没啥时间,我找个时间处理下;这块也是巨大屎山,之前他们写的一堆神秘状态我也一直不敢下手)总之还是感谢

@SNWCreations
Copy link
Copy Markdown
Contributor Author

唉,不好意思,自从毕业后一直没啥时间,我找个时间处理下;这块也是巨大屎山,之前他们写的一堆神秘状态我也一直不敢下手)总之还是感谢

辛苦

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.

3 participants