From ce205cb4b74553d47e09733a3dcf9e6a3c0fd02c Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Mon, 3 Nov 2025 09:31:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=80=8D=E5=A2=9E=E6=A0=B7=E6=9D=BF=E5=8C=85?= =?UTF-8?q?=E8=A3=85=E7=B1=BB=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/crafting/ScaledProcessingPattern.java | 79 +++++++++---------- .../crafting/ScaledProcessingPatternAdv.java | 45 +++-------- 2 files changed, 50 insertions(+), 74 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 979cebc..f83c4b4 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 @@ -6,68 +6,68 @@ import appeng.api.stacks.AEKey; import appeng.api.stacks.GenericStack; import appeng.crafting.pattern.AEProcessingPattern; import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class ScaledProcessingPattern implements IPatternDetails { - private final AEProcessingPattern original; private final long multiplier; - public ScaledProcessingPattern(AEProcessingPattern original, long multiplier) { - if (original == null) throw new IllegalArgumentException("original cannot be null"); + public ScaledProcessingPattern(@NotNull AEProcessingPattern original, long multiplier) { if (multiplier <= 0) throw new IllegalArgumentException("multiplier must be > 0"); this.original = original; this.multiplier = multiplier; } - public AEProcessingPattern getOriginal() { return original; } - public long getMultiplier() { return multiplier; } + public AEProcessingPattern getOriginal() {return original;} + + public long getMultiplier() {return multiplier;} @Override - public AEItemKey getDefinition() { + public final AEItemKey getDefinition() { return original.getDefinition(); } @Override - public IInput[] getInputs() { - IPatternDetails.IInput[] orig = original.getInputs(); - IInput[] scaled = new IInput[orig.length]; - for (int i = 0; i < orig.length; i++) { - scaled[i] = new ScaledInput(orig[i], multiplier); + public final IInput[] getInputs() { + IPatternDetails.IInput[] original = this.original.getInputs(); + IInput[] scaled = new IInput[original.length]; + for (int i = 0; i < original.length; i++) { + scaled[i] = new ScaledInput(original[i], multiplier); } return scaled; } @Override - public GenericStack[] getOutputs() { - GenericStack[] orig = original.getOutputs(); - GenericStack[] scaled = new GenericStack[orig.length]; - for (int i = 0; i < orig.length; i++) { - if (orig[i] != null) { - scaled[i] = new GenericStack(orig[i].what(), orig[i].amount() * multiplier); + public final GenericStack[] getOutputs() { + GenericStack[] original = this.original.getOutputs(); + GenericStack[] scaled = new GenericStack[original.length]; + for (int i = 0; i < original.length; i++) { + if (original[i] != null) { + scaled[i] = new GenericStack(original[i].what(), original[i].amount() * multiplier); } } return scaled; } // 兼容性方法 - public GenericStack[] getSparseInputs() { - GenericStack[] orig = original.getSparseInputs(); - GenericStack[] scaled = new GenericStack[orig.length]; - for (int i = 0; i < orig.length; i++) { - if (orig[i] != null) { - scaled[i] = new GenericStack(orig[i].what(), orig[i].amount() * multiplier); + public final GenericStack[] getSparseInputs() { + GenericStack[] original = this.original.getSparseInputs(); + GenericStack[] scaled = new GenericStack[original.length]; + for (int i = 0; i < original.length; i++) { + if (original[i] != null) { + scaled[i] = new GenericStack(original[i].what(), original[i].amount() * multiplier); } } return scaled; } - public GenericStack[] getSparseOutputs() { - GenericStack[] orig = original.getSparseOutputs(); - GenericStack[] scaled = new GenericStack[orig.length]; - for (int i = 0; i < orig.length; i++) { - if (orig[i] != null) { - scaled[i] = new GenericStack(orig[i].what(), orig[i].amount() * multiplier); + public final GenericStack[] getSparseOutputs() { + GenericStack[] original = this.original.getSparseOutputs(); + GenericStack[] scaled = new GenericStack[original.length]; + for (int i = 0; i < original.length; i++) { + if (original[i] != null) { + scaled[i] = new GenericStack(original[i].what(), original[i].amount() * multiplier); } } return scaled; @@ -93,18 +93,17 @@ public class ScaledProcessingPattern implements IPatternDetails { return "Scaled[" + original.getDefinition().getItem() + " × " + multiplier + "]"; } - private static class ScaledInput implements IInput { - private final IInput delegate; - private final long mul; + private record ScaledInput(IInput delegate, long mul) implements IInput { + @Override + public GenericStack[] getPossibleInputs() {return delegate.getPossibleInputs();} - private ScaledInput(IInput delegate, long mul) { - this.delegate = delegate; - this.mul = mul; - } + @Override + public long getMultiplier() {return delegate.getMultiplier() * mul;} - @Override public GenericStack[] getPossibleInputs() { return delegate.getPossibleInputs(); } - @Override public long getMultiplier() { return delegate.getMultiplier() * mul; } - @Override public boolean isValid(AEKey input, Level level) { return delegate.isValid(input, level); } - @Override public @Nullable AEKey getRemainingKey(AEKey template) { return delegate.getRemainingKey(template); } + @Override + public boolean isValid(AEKey input, Level level) {return delegate.isValid(input, level);} + + @Override + public @Nullable AEKey getRemainingKey(AEKey template) {return delegate.getRemainingKey(template);} } } \ No newline at end of file diff --git a/src/main/java/com/extendedae_plus/ae/api/crafting/ScaledProcessingPatternAdv.java b/src/main/java/com/extendedae_plus/ae/api/crafting/ScaledProcessingPatternAdv.java index 8721b2c..5c072d0 100644 --- a/src/main/java/com/extendedae_plus/ae/api/crafting/ScaledProcessingPatternAdv.java +++ b/src/main/java/com/extendedae_plus/ae/api/crafting/ScaledProcessingPatternAdv.java @@ -1,67 +1,44 @@ package com.extendedae_plus.ae.api.crafting; +import appeng.api.crafting.IPatternDetails; import appeng.api.stacks.AEKey; import appeng.api.stacks.KeyCounter; import appeng.crafting.pattern.AEProcessingPattern; import net.minecraft.core.Direction; import net.pedroksl.advanced_ae.common.patterns.AdvPatternDetails; +import net.pedroksl.advanced_ae.common.patterns.AdvProcessingPattern; -import java.util.HashMap; +import java.util.LinkedHashMap; /** * Advanced AE 扩展版,额外实现 AdvPatternDetails 接口。 * 仅在 Advanced AE 加载时使用。 */ public final class ScaledProcessingPatternAdv extends ScaledProcessingPattern implements AdvPatternDetails { - - private final AdvPatternDetails adv; + private final LinkedHashMap dirMap; public ScaledProcessingPatternAdv(AEProcessingPattern original, long multiplier) { super(original, multiplier); - this.adv = (AdvPatternDetails) original; + this.dirMap = ((AdvProcessingPattern) original).getDirectionMap(); } @Override public boolean directionalInputsSet() { - return adv.directionalInputsSet(); + return this.dirMap != null && !this.dirMap.isEmpty(); } @Override - public HashMap getDirectionMap() { - return adv.getDirectionMap(); + public LinkedHashMap getDirectionMap() { + return this.dirMap; } @Override public Direction getDirectionSideForInputKey(AEKey key) { - return adv.getDirectionSideForInputKey(key); + return this.dirMap.get(key); } @Override - public void pushInputsToExternalInventory(KeyCounter[] inputHolder, PatternInputSink inputSink) { -// // 使用 lazy 计算的 sparseInputs 与 inputs 来驱动;当两者长度一致时直接委托 -// GenericStack[] sInputs = getSparseInputs(); -// IInput[] ins = getInputs(); -// if (sInputs.length == ins.length) { -// super.pushInputsToExternalInventory(inputHolder, inputSink); -// return; -// } -// -// KeyCounter allInputs = new KeyCounter(); -// for (KeyCounter counter : inputHolder) { -// allInputs.addAll(counter); -// } -// for (GenericStack sparseInput : sInputs) { -// if (sparseInput != null) { -// AEKey key = sparseInput.what(); -// long amount = sparseInput.amount(); -// long available = allInputs.get(key); -// if (available < amount) { -// throw new RuntimeException("Expected at least %d of %s when pushing scaled pattern, but only %d available" -// .formatted(amount, key, available)); -// } -// inputSink.pushInput(key, amount); -// allInputs.remove(key, amount); -// } -// } + public void pushInputsToExternalInventory(KeyCounter[] inputHolder, IPatternDetails.PatternInputSink inputSink) { + super.pushInputsToExternalInventory(inputHolder, inputSink); } }