虚拟合成卡完成任务逻辑修正
This commit is contained in:
parent
98c74d588a
commit
5d50f975aa
|
|
@ -11,10 +11,13 @@ import com.extendedae_plus.mixin.advancedae.accessor.AdvExecutingCraftingJobAcce
|
|||
import com.extendedae_plus.mixin.advancedae.accessor.AdvExecutingCraftingJobTaskProgressAccessor;
|
||||
import net.pedroksl.advanced_ae.common.cluster.AdvCraftingCPU;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Mixin(value = PatternProviderLogic.class, priority = 450, remap = false)
|
||||
public abstract class PatternProviderLogicVirtualCompletionMixin {
|
||||
|
||||
|
|
@ -54,7 +57,7 @@ public abstract class PatternProviderLogicVirtualCompletionMixin {
|
|||
var tasks = advJobAccessor.eap$getAdvTasks();
|
||||
var progress = tasks.get(patternDetails);
|
||||
if (progress instanceof AdvExecutingCraftingJobTaskProgressAccessor advProgressAccessor) {
|
||||
if (advProgressAccessor.eap$getAdvValue() <= 1) {
|
||||
if (eap$advancedaeShouldFinishWholeJob(tasks, advProgressAccessor)) {
|
||||
boolean finished = false;
|
||||
try {
|
||||
advCpu.updateOutput(null);
|
||||
|
|
@ -79,4 +82,31 @@ public abstract class PatternProviderLogicVirtualCompletionMixin {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Unique
|
||||
private boolean eap$advancedaeShouldFinishWholeJob(
|
||||
Map<IPatternDetails, Object> tasks,
|
||||
AdvExecutingCraftingJobTaskProgressAccessor matchedProgress) {
|
||||
if (matchedProgress.eap$getAdvValue() > 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (var entry : tasks.entrySet()) {
|
||||
var taskProgress = entry.getValue();
|
||||
if (!(taskProgress instanceof AdvExecutingCraftingJobTaskProgressAccessor advTaskProgress)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
long remaining = advTaskProgress.eap$getAdvValue();
|
||||
if (taskProgress == matchedProgress) {
|
||||
remaining -= 1;
|
||||
}
|
||||
|
||||
if (remaining > 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
|||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -146,7 +147,7 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj
|
|||
if (job instanceof ExecutingCraftingJobAccessor accessor) {
|
||||
var tasks = accessor.extendedae_plus$getTasks();
|
||||
var progress = tasks.get(patternDetails);
|
||||
if (progress != null && progress.extendedae_plus$getValue() <= 1) {
|
||||
if (eap$compatShouldFinishWholeJob(tasks, progress)) {
|
||||
cluster.updateOutput(null);
|
||||
try {
|
||||
logicAccessor.extendedae_plus$invokeFinishJob(true);
|
||||
|
|
@ -293,6 +294,33 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj
|
|||
return this.mainNode;
|
||||
}
|
||||
|
||||
@Unique
|
||||
private boolean eap$compatShouldFinishWholeJob(
|
||||
Map<IPatternDetails, com.extendedae_plus.mixin.ae2.accessor.ExecutingCraftingJobTaskProgressAccessor> tasks,
|
||||
com.extendedae_plus.mixin.ae2.accessor.ExecutingCraftingJobTaskProgressAccessor matchedProgress) {
|
||||
if (matchedProgress == null || matchedProgress.extendedae_plus$getValue() > 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (var entry : tasks.entrySet()) {
|
||||
var taskProgress = entry.getValue();
|
||||
if (taskProgress == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
long remaining = taskProgress.extendedae_plus$getValue();
|
||||
if (taskProgress == matchedProgress) {
|
||||
remaining -= 1;
|
||||
}
|
||||
|
||||
if (remaining > 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Inject(method = "pushPattern", at = @At("HEAD"))
|
||||
private void eap$compatOnPushPattern(IPatternDetails patternDetails, KeyCounter[] inputHolder, CallbackInfoReturnable<Boolean> cir) {
|
||||
eap$compatTryVirtualCompletion(patternDetails);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user