src/main/java/com/moe/allweapon/Entityadd/EntityDriveAdd.java:244-300(onUpdate:245 每tick new Date 计时、262/298 双扫描)
src/main/java/com/moe/allweapon/Entityadd/EntitySlashDimensionAdd.java:176-225(185/221 双扫描)
src/main/java/com/moe/allweapon/Entityadd/EntitySummonedButterfly.java:599-628、227、420
src/main/java/com/moe/allweapon/Entityadd/EntitySummonedSwordAdd.java:598-628、226、419
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
问题描述
EntityDriveAdd / EntitySlashDimensionAdd / EntitySummonedButterfly / EntitySummonedSwordAdd 的 onUpdate 与 balumg 的 Drive 弹体同类问题:每弹体每 tick 各执行 2 次
getEntitiesWithinAABBExcludingEntity(DestructableSelector 无条件 + AttackableSelector 在 multiHit/偶数 tick),返回列表再做removeAll(alreadyHitEntity)(ArrayList.contains 线性去重,O(命中数×已命中数))。与 SlashBlade-MoreSA 的 EntityDrive 雷同。不同点:本仓库 DriveAdd 还在 onUpdate 顶部每 tick 调用new Date().getTime()做存活计时(分配 Date 相关对象 + 墙钟计时而非 ticksExisted)。4 类弹体在剑技齐发时数量成倍,密集场景下扫描成本显著。代码位置
src/main/java/com/moe/allweapon/Entityadd/EntityDriveAdd.java:244-300(onUpdate:245 每tick new Date 计时、262/298 双扫描)
src/main/java/com/moe/allweapon/Entityadd/EntitySlashDimensionAdd.java:176-225(185/221 双扫描)
src/main/java/com/moe/allweapon/Entityadd/EntitySummonedButterfly.java:599-628、227、420
src/main/java/com/moe/allweapon/Entityadd/EntitySummonedSwordAdd.java:598-628、226、419
问题代码
热路径
EntityDriveAdd/EntitySlashDimensionAdd/EntitySummonedButterfly/EntitySummonedSwordAdd.onUpdate(服务端每 tick,每个飞行弹体)
主线验收后已推送:c3284030a3764cd418e450948365f495a93bbfc4(perf(slashblade-allweapon): 加速弹体命中去重)。
EntityDriveAdd、EntitySlashDimensionAdd、EntitySummonedButterfly 与 EntitySummonedSwordAdd 的 alreadyHitEntity 已由 ArrayList 改为 HashSet。该集合只用于 clear、add、addAll 和 removeAll 成员排除,未发现迭代、顺序或重复值依赖;因此保留所有命中、攻击、冷却和 selector 调用顺序,同时使扫描结果的已命中过滤不再线性查找。
验证:主线以 Java 25 + Gradle 9.4.0 执行 build --no-daemon --console=plain 成功(test 为 NO-SOURCE)。
保持开放:DestructableSelector 与 AttackableSelector 的两次 AABB 查询筛选集与后处理不同,不能在不改变目标/伤害语义下直接合并;EntityDriveAdd 的墙钟生命周期改为 ticksExisted 也会改变卡顿条件下的存活语义。
Generated by Codex with GPT-5
Archive 组织仓已过时(Daniel 2026-09-23),整组织 issue 统一关闭。
[性能][中] Drive/SlashDimension/Summoned 弹体每 tick 双 getEntitiesWithinAABBExcludingEntity 扫描 + 线性去重(4 类弹体)to Drive/SlashDimension/Summoned 弹体每 tick 双 getEntitiesWithinAABBExcludingEntity 扫描 + 线性去重(4 类弹体)