倍增样板包装类调整
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.api.stacks.GenericStack;
|
||||||
import appeng.crafting.pattern.AEProcessingPattern;
|
import appeng.crafting.pattern.AEProcessingPattern;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public class ScaledProcessingPattern implements IPatternDetails {
|
public class ScaledProcessingPattern implements IPatternDetails {
|
||||||
|
|
||||||
private final AEProcessingPattern original;
|
private final AEProcessingPattern original;
|
||||||
private final long multiplier;
|
private final long multiplier;
|
||||||
|
|
||||||
public ScaledProcessingPattern(AEProcessingPattern original, long multiplier) {
|
public ScaledProcessingPattern(@NotNull AEProcessingPattern original, long multiplier) {
|
||||||
if (original == null) throw new IllegalArgumentException("original cannot be null");
|
|
||||||
if (multiplier <= 0) throw new IllegalArgumentException("multiplier must be > 0");
|
if (multiplier <= 0) throw new IllegalArgumentException("multiplier must be > 0");
|
||||||
this.original = original;
|
this.original = original;
|
||||||
this.multiplier = multiplier;
|
this.multiplier = multiplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AEProcessingPattern getOriginal() { return original; }
|
public AEProcessingPattern getOriginal() {return original;}
|
||||||
public long getMultiplier() { return multiplier; }
|
|
||||||
|
public long getMultiplier() {return multiplier;}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AEItemKey getDefinition() {
|
public final AEItemKey getDefinition() {
|
||||||
return original.getDefinition();
|
return original.getDefinition();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IInput[] getInputs() {
|
public final IInput[] getInputs() {
|
||||||
IPatternDetails.IInput[] orig = original.getInputs();
|
IPatternDetails.IInput[] original = this.original.getInputs();
|
||||||
IInput[] scaled = new IInput[orig.length];
|
IInput[] scaled = new IInput[original.length];
|
||||||
for (int i = 0; i < orig.length; i++) {
|
for (int i = 0; i < original.length; i++) {
|
||||||
scaled[i] = new ScaledInput(orig[i], multiplier);
|
scaled[i] = new ScaledInput(original[i], multiplier);
|
||||||
}
|
}
|
||||||
return scaled;
|
return scaled;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GenericStack[] getOutputs() {
|
public final GenericStack[] getOutputs() {
|
||||||
GenericStack[] orig = original.getOutputs();
|
GenericStack[] original = this.original.getOutputs();
|
||||||
GenericStack[] scaled = new GenericStack[orig.length];
|
GenericStack[] scaled = new GenericStack[original.length];
|
||||||
for (int i = 0; i < orig.length; i++) {
|
for (int i = 0; i < original.length; i++) {
|
||||||
if (orig[i] != null) {
|
if (original[i] != null) {
|
||||||
scaled[i] = new GenericStack(orig[i].what(), orig[i].amount() * multiplier);
|
scaled[i] = new GenericStack(original[i].what(), original[i].amount() * multiplier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return scaled;
|
return scaled;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 兼容性方法
|
// 兼容性方法
|
||||||
public GenericStack[] getSparseInputs() {
|
public final GenericStack[] getSparseInputs() {
|
||||||
GenericStack[] orig = original.getSparseInputs();
|
GenericStack[] original = this.original.getSparseInputs();
|
||||||
GenericStack[] scaled = new GenericStack[orig.length];
|
GenericStack[] scaled = new GenericStack[original.length];
|
||||||
for (int i = 0; i < orig.length; i++) {
|
for (int i = 0; i < original.length; i++) {
|
||||||
if (orig[i] != null) {
|
if (original[i] != null) {
|
||||||
scaled[i] = new GenericStack(orig[i].what(), orig[i].amount() * multiplier);
|
scaled[i] = new GenericStack(original[i].what(), original[i].amount() * multiplier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return scaled;
|
return scaled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GenericStack[] getSparseOutputs() {
|
public final GenericStack[] getSparseOutputs() {
|
||||||
GenericStack[] orig = original.getSparseOutputs();
|
GenericStack[] original = this.original.getSparseOutputs();
|
||||||
GenericStack[] scaled = new GenericStack[orig.length];
|
GenericStack[] scaled = new GenericStack[original.length];
|
||||||
for (int i = 0; i < orig.length; i++) {
|
for (int i = 0; i < original.length; i++) {
|
||||||
if (orig[i] != null) {
|
if (original[i] != null) {
|
||||||
scaled[i] = new GenericStack(orig[i].what(), orig[i].amount() * multiplier);
|
scaled[i] = new GenericStack(original[i].what(), original[i].amount() * multiplier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return scaled;
|
return scaled;
|
||||||
|
|
@ -93,18 +93,17 @@ public class ScaledProcessingPattern implements IPatternDetails {
|
||||||
return "Scaled[" + original.getDefinition().getItem() + " × " + multiplier + "]";
|
return "Scaled[" + original.getDefinition().getItem() + " × " + multiplier + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class ScaledInput implements IInput {
|
private record ScaledInput(IInput delegate, long mul) implements IInput {
|
||||||
private final IInput delegate;
|
@Override
|
||||||
private final long mul;
|
public GenericStack[] getPossibleInputs() {return delegate.getPossibleInputs();}
|
||||||
|
|
||||||
private ScaledInput(IInput delegate, long mul) {
|
@Override
|
||||||
this.delegate = delegate;
|
public long getMultiplier() {return delegate.getMultiplier() * mul;}
|
||||||
this.mul = mul;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override public GenericStack[] getPossibleInputs() { return delegate.getPossibleInputs(); }
|
@Override
|
||||||
@Override public long getMultiplier() { return delegate.getMultiplier() * mul; }
|
public boolean isValid(AEKey input, Level level) {return delegate.isValid(input, level);}
|
||||||
@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 @Nullable AEKey getRemainingKey(AEKey template) {return delegate.getRemainingKey(template);}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,67 +1,44 @@
|
||||||
package com.extendedae_plus.ae.api.crafting;
|
package com.extendedae_plus.ae.api.crafting;
|
||||||
|
|
||||||
|
import appeng.api.crafting.IPatternDetails;
|
||||||
import appeng.api.stacks.AEKey;
|
import appeng.api.stacks.AEKey;
|
||||||
import appeng.api.stacks.KeyCounter;
|
import appeng.api.stacks.KeyCounter;
|
||||||
import appeng.crafting.pattern.AEProcessingPattern;
|
import appeng.crafting.pattern.AEProcessingPattern;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.pedroksl.advanced_ae.common.patterns.AdvPatternDetails;
|
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 扩展版,额外实现 AdvPatternDetails 接口。
|
||||||
* 仅在 Advanced AE 加载时使用。
|
* 仅在 Advanced AE 加载时使用。
|
||||||
*/
|
*/
|
||||||
public final class ScaledProcessingPatternAdv extends ScaledProcessingPattern implements AdvPatternDetails {
|
public final class ScaledProcessingPatternAdv extends ScaledProcessingPattern implements AdvPatternDetails {
|
||||||
|
private final LinkedHashMap<AEKey, Direction> dirMap;
|
||||||
private final AdvPatternDetails adv;
|
|
||||||
|
|
||||||
public ScaledProcessingPatternAdv(AEProcessingPattern original, long multiplier) {
|
public ScaledProcessingPatternAdv(AEProcessingPattern original, long multiplier) {
|
||||||
super(original, multiplier);
|
super(original, multiplier);
|
||||||
this.adv = (AdvPatternDetails) original;
|
this.dirMap = ((AdvProcessingPattern) original).getDirectionMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean directionalInputsSet() {
|
public boolean directionalInputsSet() {
|
||||||
return adv.directionalInputsSet();
|
return this.dirMap != null && !this.dirMap.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HashMap<AEKey, Direction> getDirectionMap() {
|
public LinkedHashMap<AEKey, Direction> getDirectionMap() {
|
||||||
return adv.getDirectionMap();
|
return this.dirMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Direction getDirectionSideForInputKey(AEKey key) {
|
public Direction getDirectionSideForInputKey(AEKey key) {
|
||||||
return adv.getDirectionSideForInputKey(key);
|
return this.dirMap.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void pushInputsToExternalInventory(KeyCounter[] inputHolder, PatternInputSink inputSink) {
|
public void pushInputsToExternalInventory(KeyCounter[] inputHolder, IPatternDetails.PatternInputSink inputSink) {
|
||||||
// // 使用 lazy 计算的 sparseInputs 与 inputs 来驱动;当两者长度一致时直接委托
|
super.pushInputsToExternalInventory(inputHolder, inputSink);
|
||||||
// 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);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user