倍增样板包装类调整
This commit is contained in:
parent
c792cad8e7
commit
ce205cb4b7
|
|
@ -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);}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<AEKey, Direction> 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<AEKey, Direction> getDirectionMap() {
|
||||
return adv.getDirectionMap();
|
||||
public LinkedHashMap<AEKey, Direction> 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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user