From 67fd40011a53c611eca7c762d42407667d291419 Mon Sep 17 00:00:00 2001 From: layue13 Date: Sat, 5 Sep 2026 16:17:26 +0800 Subject: [PATCH] =?UTF-8?q?perf(slashblade-exsa):=20=E5=8A=A0=E9=80=9F?= =?UTF-8?q?=E9=A3=9E=E5=89=91=E5=B7=B2=E5=91=BD=E4=B8=AD=E7=9B=AE=E6=A0=87?= =?UTF-8?q?=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原因 / Cause: 五类飞剑实体共享 EntityDriveEx 的 alreadyHitEntity 列表;每次 AABB 扫描后的 removeAll 都对历史命中目标线性查询。 修复 / Fix: 将共享的 alreadyHitEntity 从 ArrayList 替换为 HashSet;保持候选列表、选择器、命中处理和生命周期逻辑原样。 性能收益 / Performance: DriveEx 及其 Phantom、Flare、Hurricane、Lightning 子类扫描结果的历史命中排除由线性成员查找降为均摊常数时间。 兼容性 / Compatibility: 命中集合仅用于 clear、add、addAll 和 removeAll 成员判定,未被迭代或按顺序读取;候选实体仍按原始世界查询顺序处理。 验证 / Validation: Java 8 下执行 Gradle 8.14.3 build --rerun-tasks --no-daemon --console=plain 成功(test 为 NO-SOURCE)。 Refs #1 --- .../flammpfeil/slashblade/exsa/entity/EntityDriveEx.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/mods/flammpfeil/slashblade/exsa/entity/EntityDriveEx.java b/src/main/java/mods/flammpfeil/slashblade/exsa/entity/EntityDriveEx.java index d932797..2ef660e 100644 --- a/src/main/java/mods/flammpfeil/slashblade/exsa/entity/EntityDriveEx.java +++ b/src/main/java/mods/flammpfeil/slashblade/exsa/entity/EntityDriveEx.java @@ -30,9 +30,10 @@ package mods.flammpfeil.slashblade.exsa.entity; import cpw.mods.fml.common.registry.IThrowableEntity; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Random; +import java.util.Set; import mods.flammpfeil.slashblade.ItemSlashBlade; import mods.flammpfeil.slashblade.ability.StylishRankManager; import net.minecraft.block.Block; @@ -57,7 +58,7 @@ extends Entity implements IThrowableEntity { protected Entity thrower; protected ItemStack blade = null; - protected List alreadyHitEntity = new ArrayList(); + protected Set alreadyHitEntity = new HashSet(); protected float AttackLevel = 0.0f; public EntityDriveEx(World par1World) {