From 330b80dfec651b330497c2fe46ae34b87302ab14 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Thu, 30 Oct 2025 20:58:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E8=AE=B0=E5=BD=95=E6=A0=88=20fix:=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AE=A1=E7=AE=97=E8=BF=87=E7=A8=8B=E4=B8=AD?= =?UTF-8?q?=E4=BC=9A=E5=87=BA=E7=8E=B0=E6=95=B0=E6=8D=AE=E5=8C=85=E8=BF=87?= =?UTF-8?q?=E5=A4=A7=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/crafting/ScaledProcessingPattern.java | 17 ++++ .../smartDoubling/RequestedAmountHolder.java | 88 +++++++++++++++---- 2 files changed, 86 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/extendedae_plus/ae/api/crafting/ScaledProcessingPattern.java b/src/main/java/com/extendedae_plus/ae/api/crafting/ScaledProcessingPattern.java index c402127..a92aec2 100644 --- a/src/main/java/com/extendedae_plus/ae/api/crafting/ScaledProcessingPattern.java +++ b/src/main/java/com/extendedae_plus/ae/api/crafting/ScaledProcessingPattern.java @@ -40,6 +40,23 @@ public class ScaledProcessingPattern implements IPatternDetails { return original; } + @Override + public final boolean equals(Object o) { + if (this == o) return true; + if (o == null) return false; + // 比较另一个缩放样板,比较其 original 字段 + if (o instanceof ScaledProcessingPattern sp) { + return this.original.equals(sp.getOriginal()); + } + // 委托给原始样板的 equals(比如遇到原始的 AEProcessingPattern) + return this.original.equals(o); + } + + @Override + public final int hashCode() { + return original.hashCode(); + } + @Override public AEItemKey getDefinition() { return definition; diff --git a/src/main/java/com/extendedae_plus/util/smartDoubling/RequestedAmountHolder.java b/src/main/java/com/extendedae_plus/util/smartDoubling/RequestedAmountHolder.java index 005f919..c7271e5 100644 --- a/src/main/java/com/extendedae_plus/util/smartDoubling/RequestedAmountHolder.java +++ b/src/main/java/com/extendedae_plus/util/smartDoubling/RequestedAmountHolder.java @@ -1,44 +1,94 @@ package com.extendedae_plus.util.smartDoubling; -import java.util.ArrayDeque; -import java.util.Deque; - /** - * Thread-local stack holder for requested amounts to support nested requests. + * 请求数量线程本地栈,用于支持嵌套请求(避免不同请求间的干扰)。 + *
+ * 每个线程都有自己独立的 LongStack,不会与其他线程共享。
+ * 使用 long[] 而非 Long 对象,避免装箱开销与 GC 压力。
*/
public final class RequestedAmountHolder {
- private static final ThreadLocal
+ * - 无装箱开销(比 Long 节省内存、避免 GC 压力)
+ * - 每个线程独占实例(无需同步)
+ * - 自动扩容机制(容量不够时按倍数增长)
+ */
+ private static final class LongStack {
+ private long[] data = new long[16]; // 初始容量
+ private int size = 0; // 当前栈深
+
+ void push(long v) {
+ if (size == data.length) {
+ long[] n = new long[data.length * 2]; // 扩容为原容量的 2 倍
+ System.arraycopy(data, 0, n, 0, data.length);
+ data = n;
+ }
+ data[size++] = v;
+ }
+
+ void pop() {
+ if (size > 0) size--;
+ }
+
+ long peek() {
+ return size == 0 ? 0L : data[size - 1];
+ }
+
+ int depth() {
+ return size;
+ }
+
+ void clear() {
+ // 若数组容量过大,则在清空时重置为初始容量
+ if (data.length > 1024) {
+ data = new long[16];
+ }
+ size = 0;
+ }
+ }
+}
\ No newline at end of file