虚拟合成卡完成任务逻辑修正
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 com.extendedae_plus.mixin.advancedae.accessor.AdvExecutingCraftingJobTaskProgressAccessor;
|
||||||
import net.pedroksl.advanced_ae.common.cluster.AdvCraftingCPU;
|
import net.pedroksl.advanced_ae.common.cluster.AdvCraftingCPU;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
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.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@Mixin(value = PatternProviderLogic.class, priority = 450, remap = false)
|
@Mixin(value = PatternProviderLogic.class, priority = 450, remap = false)
|
||||||
public abstract class PatternProviderLogicVirtualCompletionMixin {
|
public abstract class PatternProviderLogicVirtualCompletionMixin {
|
||||||
|
|
||||||
|
|
@ -54,7 +57,7 @@ public abstract class PatternProviderLogicVirtualCompletionMixin {
|
||||||
var tasks = advJobAccessor.eap$getAdvTasks();
|
var tasks = advJobAccessor.eap$getAdvTasks();
|
||||||
var progress = tasks.get(patternDetails);
|
var progress = tasks.get(patternDetails);
|
||||||
if (progress instanceof AdvExecutingCraftingJobTaskProgressAccessor advProgressAccessor) {
|
if (progress instanceof AdvExecutingCraftingJobTaskProgressAccessor advProgressAccessor) {
|
||||||
if (advProgressAccessor.eap$getAdvValue() <= 1) {
|
if (eap$advancedaeShouldFinishWholeJob(tasks, advProgressAccessor)) {
|
||||||
boolean finished = false;
|
boolean finished = false;
|
||||||
try {
|
try {
|
||||||
advCpu.updateOutput(null);
|
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.CallbackInfo;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
@ -146,7 +147,7 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj
|
||||||
if (job instanceof ExecutingCraftingJobAccessor accessor) {
|
if (job instanceof ExecutingCraftingJobAccessor accessor) {
|
||||||
var tasks = accessor.extendedae_plus$getTasks();
|
var tasks = accessor.extendedae_plus$getTasks();
|
||||||
var progress = tasks.get(patternDetails);
|
var progress = tasks.get(patternDetails);
|
||||||
if (progress != null && progress.extendedae_plus$getValue() <= 1) {
|
if (eap$compatShouldFinishWholeJob(tasks, progress)) {
|
||||||
cluster.updateOutput(null);
|
cluster.updateOutput(null);
|
||||||
try {
|
try {
|
||||||
logicAccessor.extendedae_plus$invokeFinishJob(true);
|
logicAccessor.extendedae_plus$invokeFinishJob(true);
|
||||||
|
|
@ -293,6 +294,33 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj
|
||||||
return this.mainNode;
|
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"))
|
@Inject(method = "pushPattern", at = @At("HEAD"))
|
||||||
private void eap$compatOnPushPattern(IPatternDetails patternDetails, KeyCounter[] inputHolder, CallbackInfoReturnable<Boolean> cir) {
|
private void eap$compatOnPushPattern(IPatternDetails patternDetails, KeyCounter[] inputHolder, CallbackInfoReturnable<Boolean> cir) {
|
||||||
eap$compatTryVirtualCompletion(patternDetails);
|
eap$compatTryVirtualCompletion(patternDetails);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user